Skip to main content
 首页 » 编程设计

c#之可选组的正则表达式

2024年01月22日33jackei

我想解析以下示例字符串

foo :6 

分为两组:文本和数字。仅当字符“:”位于数字本身之前时,才应填充数字组。

所以:

foo 6 -> Text = "foo 6" 
foo :6 -> Text = "foo", Number = "6" 

到目前为止我能想到的最好的是

(?<Text>.+)(?=:(?<Number>\d+)h?)? 

但这不起作用,因为第一组贪婪地扩展到整个字符串。

有什么建议吗?

请您参考如下方法:

如果您真的想要使用正则表达式,您可以编写一个非常简单的正则表达式,无需环顾四周:

(?<Text>[^:]+):?(?<Number>\d*) 

在我看来,正则表达式应该越简单越好;如果您不希望 Text 组周围有空格,我建议您使用 match.Groups["Text"].Value.Strip()。

请注意,如果您正在解析多行字符串,则此模式将不起作用,因为正如@OscarHermosilla 在下面提到的那样,[?:]+ 也将匹配换行符。虽然修复很简单,用 [^:\n]

改变它