我想用 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,您可以看到引擎的差异。