我想解析以下示例字符串
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]
