我有两种可能的模式:
1.2 hello
1.2.3 hello
我想匹配1
,2
和3
,如果后者存在。
Optional items似乎是要走的路,但我的pattern (\d)\.(\d)?(\.(\d)).hello
仅匹配1.2.3 hello
(几乎完美:我得到四组但是第一组,第二组和第四组包含我想要的东西) - 第一次测试刺痛根本不匹配。
什么是正确的匹配模式?
答案 0 :(得分:1)
您的模式包含与数字匹配的(\d)\.(\d)?(\.(\d))
部分,然后是.
,然后是可选数字(可能是1或0),然后是.
+数字。因此,它可以匹配1..2 hello
,但不匹配1.2 hello
。
您可以使第三组不捕获并使其成为可选:
(\d)\.(\d)(?:\.(\d))?\s*hello
^^^ ^^
请参阅regex demo
如果您的正则表达式引擎不允许非捕获组,请使用捕获组,只需要从第4组中获取值:
(\d)\.(\d)(\.(\d))?\s*hello
请参阅this regex。
请注意,我在使用.
的{{1}}之前替换了hello
以匹配零个或多个空格。
另请注意,如果您需要在一行开头匹配这些数字,则可以考虑使用\s*
预先处理该模式(并且取决于您的正则表达式引擎/工具,^
改性剂)。