使用 C# Regex.Split 方法,我想拆分总是以 RepXYZ 开头的字符串,其中 XYZ 位是一个总是有 3 或 4 个字符的数字。
例子
结果应该是:
到目前为止,我已经尝试过 (Rep)[\d]{3,4} 和 ((Rep)[\d]{3,4})+ 但这两个都给了我不想要的结果
最佳答案
使用 Regex.Split
通常会导致结果数组中出现空项或不需要的项。使用 (Rep)[\d]{3,4}
在 Regex.Split
, 会放 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);
}
见 regex demo细节:
^
- 字符串开头 (Rep\d+)
- 捕获组 1:Rep
和任何一位或多位数字 (.*)
- 捕获组 2:除换行符以外的任何一个或多个字符,尽可能多 $
- 字符串的结尾。 使用基于环视的正则表达式可以更好地实现拆分方法:
var results = Regex.Split(text, @"(?<=^Rep\d+)(?=[$_])");
见 this regex demo .(?<=^Rep\d+)(?=[$_])
在紧跟 Rep
之前的位置拆分字符串和字符串开头的一位或多位数字,紧随其后的是 $
或 _
.
关于c# - 用于根据模式将字符串拆分为两个集合的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63845014/