C# 用于根据模式将字符串拆分为两个集合的正则表达式
使用C#Regex.Split方法,我想分割总是以RepXYZ开头的字符串,其中XYZ位是一个总是有3或4个字符的数字 例子C# 用于根据模式将字符串拆分为两个集合的正则表达式,c#,regex,C#,Regex,使用C#Regex.Split方法,我想分割总是以RepXYZ开头的字符串,其中XYZ位是一个总是有3或4个字符的数字 例子 “Rep1007$chkCheckBox” “Rep127_组_文本” 结果应该是: {“Rep1007”,“$chkCheckBox”} {“Rep127”,“_组_文本”} 到目前为止,我已经尝试过(Rep)[\d]{3,4}和((Rep)[\d]{3,4})+,但这两种方法都会给我带来不想要的结果尝试在$或上拆分正则表达式模式: string input = &qu
到目前为止,我已经尝试过(Rep)[\d]{3,4}和((Rep)[\d]{3,4})+,但这两种方法都会给我带来不想要的结果尝试在
$
或上拆分正则表达式模式:
string input = "Rep127_Group_Text";
string[] parts = input.Split(new[] { '$', '_' }, 2);
foreach (string part in parts)
{
Console.WriteLine(part);
}
这张照片是:
Rep127
Group_Text
使用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:除换行符外的任何一个或多个字符,尽可能多
$
-字符串结束
使用基于lookaround的正则表达式可以更好地实现拆分方法:
var results = Regex.Split(text, @"(?<=^Rep\d+)(?=[$_])");
var results=Regex.Split(text,@)(?您的Regex与Rep127_Group_text
@WiktorStribiżew一起修复了它,至少对于给定的示例数据是如此。似乎没有任何API方法可以阻止Regex.Split
在每次发生时进行拆分(与常规的Regex字符串拆分不同)。