我想在C#.NET中用一个常规表达来拆分以逗号分隔的测试字符串. 我知道我可以在这个例子中使用字符串拆分方法,但模式和输入字符串有点复杂,我想保持简单.
模式是这样的:
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
但我期待
[0]
[1] text2
[2] text3
[3]
[4] text5
所以我的问题是: 为什么当测试字符串以空字符串开头时,.NET引擎会出现问题? 即使引擎无法返回第一个空字符串,文本2在哪里?或者第一个匹配是空字符串? 我必须更改什么才能让它在C#中工作?
您可以在Regex101上测试它.如果您切换到PCRE 2而不是.NET 7,您会得到预期的结果.