【发布时间】:2018-07-14 21:38:37
【问题描述】:
我期待一个字符串,它可能有也可能没有'#',后跟一些数字。如果“#”之后有任何数字,我想将其捕获为第二组,否则只需捕获第一组中的所有内容。以下是 C# 的示例
ABC#99999//匹配Group1:ABC和Group2:999999ABC#8//匹配 Group1 9ABC 和 Group9ABC//匹配 Group1 9ABC9ABC#//匹配 Group1 9ABC#
以下正则表达式有效,但对于第 3 和第 4 个字符串,它捕获到第 3 组而不是第 1 组。对于上述情况,是否有更好的方法?
(?:(.+)#(\d+))|(.+)
另外,我想出了以下正则表达式,但问题是由于第一组没有固定格式(如长度),它从第一个和第二个字符串中捕获整个字符串,而不是捕获 2 个组
(.+)(?:#(\d+))?
【问题讨论】:
-
那么,你基本上想匹配整个字符串,对吧?
-
@WiktorStribiżew 是的,但如果 '#' 之后有数字,我需要将它们捕获到两个单独的组中
-
好的,然后见my answer below。请修正问题中的预期结果,因为要求与示例不同步。
-
@Praati 我根据您对“CertainPerformance”答案的评论编辑了第 4 个示例输出,对吗?