簡體   English   中英

用於根據模式將字符串拆分為兩個集合的正則表達式

[英]Regex for splitting string into a collection of two based on a pattern

使用 C# Regex.Split 方法,我想拆分總是以 RepXYZ 開頭的字符串,其中 XYZ 位是一個總是有 3 或 4 個字符的數字。

例子

  1. “Rep1007$chkCheckBox”
  2. “Rep127_Group_Text”

結果應該是:

  1. {"Rep1007","$chkCheckBox"}
  2. {"Rep127","_Group_Text"}

到目前為止,我已經嘗試過 (Rep)[\\d]{3,4} 和 ((Rep)[\\d]{3,4})+ 但這兩個都給了我不想要的結果

使用Regex.Split通常會導致結果數組中出現空項或不需要的項。 Regex.Split使用(Rep)[\\d]{3,4} ,會將沒有數字的Rep放入結果數組中。 (Rep[\\d]{3,4})會將Rep和數字放入結果中,但由於匹配在開始,因此數組中會有一個空項。

我建議在這里使用Regex.Match

var match = Regex.Match(text, @"^(Rep\d+)(.*)$");
if (match.Success)
{
    Console.WriteLine(match.Groups[1].Value);
    Console.WriteLine(match.Groups[2].Value);
}

查看正則表達式演示

在此處輸入圖片說明

細節:

  • ^ - 字符串的開始
  • (Rep\\d+) - 捕獲組 1: Rep和任何一位或多位數字
  • (.*) - 捕獲組 2:除換行符以外的任何一個或多個字符,盡可能多
  • $ - 字符串的結尾。

使用基於環視的正則表達式可以更好地實現拆分方法:

var results = Regex.Split(text, @"(?<=^Rep\d+)(?=[$_])");

請參閱此正則表達式演示

(?<=^Rep\\d+)(?=[$_])在緊跟Rep和字符串開頭的一個或多個數字的位置拆分字符串,並緊跟在$_

嘗試在$_上拆分正則表達式模式:

string input = "Rep127_Group_Text";
string[] parts = input.Split(new[] { '$', '_' }, 2);
foreach (string part in parts)
{
    Console.WriteLine(part);
}

這打印:

Rep127
Group_Text

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM