如果第一个匹配为空,正则表达式不会在 C# 中拆分分号分隔的字符串

问题描述 投票:0回答:1

我想用 C# 中的正则表达式拆分分号分隔的测试字符串。 我知道我可以在这个例子中使用字符串分割方法,但是模式和输入字符串有点复杂,我想保持简单。

这是图案:

string pattern = @"(?:^|;)(([^;]*|)(?=;|$))";`

这是测试字符串:

string input = @"text1;text2;text3;;text5";

比赛结果为:

[0] text1
[1] text2
[2] text3
[3] 
[4] text5

这对我来说看起来不错!

但是如果我将测试字符串更改为:

string input = @";text2;text3;;text5";

然后我得到这些结果:

[0] 
[1] text3
[2] 
[3] text5`

所以我的问题是: 当测试字符串以空字符串开头时,为什么 C# 引擎会出现问题? 即使引擎无法返回第一个空字符串,text2 又在哪里? 我需要改变什么才能让它在 C# 中也能工作?

您可以在Regex101上进行测试。如果您在左侧切换 PCRE2 和 .NET 7,您可以看到引擎的差异。

c# regex
1个回答
0
投票

我不能代表 PCRE2 等其他正则表达式风格,但对于 C#,下面的一个可以完成这项工作。

它匹配每组不是分号的字符,并且至少有一个字符以确保排除空组。

([^;]+)

参见regex101

© www.soinside.com 2019 - 2024. All rights reserved.