我有这样的短信:
"2008/00419 Bir kompres r AR ELİK ANONİMŞİRKETİ2008/00438 Su altıcanlıün nakilıDENİZSAN DENİZCİLİK ANONİMŞİRKETİ2008/03300 YAĞLI AĞARTMA TOPRA TOPRA KAZANIM IN GER KAZANIM NTEM M MAYSA Y NTEM MAYSA YA SANAY RKET ANON M pompas“
我需要把这个文本分成“数字+文本”记录。如下所示:
ŞİRKETİ
IN VE
我使用这样的正则表达式:
Regex splitRegex = new Regex(@"(?>(\d{4}\/\d{5}))");
List<string> notes = splitRegex.Split(text).ToList();,但我得到的结果是:

帮助我选择正确的Regex设置或表达式本身。谢谢。
发布于 2021-02-19 06:28:00
问题解决了!使用如下正则表达式:
Regex splitRegex =新Regex(@"(?=\d{4}/\d{5})",RegexOptions.Multiline);
发布于 2021-02-19 06:27:03
没有对此进行测试,但我认为您只是想在regex模式中包含非数字部分?
Regex splitRegex = new Regex(@"(?x) # ignore whitespace and comments
(?<record> # define capturing group
\d{4} # match 4 digits
\/ # match forward-slash
\d{5} # match 5 digits
[^\d]+ # match following text that is not a digit
)
");如果我还记得用它正确地调用Split(),将导致在每个匹配之间有一个空字符串的数组。即。您要分割的“分隔符”是您希望捕获的文本。所以有点尴尬。
我不认为这是一个“分裂”的问题。用这种方式调用Regex.Matches()并简单地枚举结果就更清楚了。伪码:
foreach (Match m in regex.Matches(inputText))
{
string record = m.Groups["record"].Value;
//...
}发布于 2021-02-19 06:39:41
你可以只使用拆分函数。
// Split text(assigned str), separated by a space followed by "2"
string[] recordList = str.Split(" 2");
Console.WriteLine(recordList[0]);
Console.WriteLine("2" + recordList[1]);
Console.WriteLine("2" + recordList[2]);这将返回您想要的输出,并将工作的任何其他记录,只要是2000年的。
https://stackoverflow.com/questions/66272326
复制相似问题