可选组的正则表达式

Chr*_*ris 1 .net c# regex

我想解析以下示例字符串

foo :6
Run Code Online (Sandbox Code Playgroud)

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

所以:

foo 6 -> Text = "foo 6"
foo :6 -> Text = "foo", Number = "6"
Run Code Online (Sandbox Code Playgroud)

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

(?<Text>.+)(?=:(?<Number>\d+)h?)?
Run Code Online (Sandbox Code Playgroud)

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

有什么建议?

Bla*_*ear 5

如果你真的想使用正则表达式,你可以编写一个非常简单的,没有外观:

(?<Text>[^:]+):?(?<Number>\d*)
Run Code Online (Sandbox Code Playgroud)

在我看来,正则表达式应该尽可能简单; 如果你不想要Text小组周围的空间,我建议你使用match.Groups["Text"].Value.Strip().

请注意,如果要解析多行字符串,则此模式将不起作用,因为,如下面提到的@OscarHermosilla,[?:]+也将匹配换行符.修复很简单,但改变它[^:\n]