1
我有两个可能的模式:如何可选地匹配一个组?
1.2 hello
1.2.3 hello
我想,如果后者存在匹配1
,2
和3
。
Optional items似乎是要走的路,但我pattern(\d)\.(\d)?(\.(\d)).hello
比赛只1.2.3 hello
(几乎是完美的:我得到四组,但第一,第二和第四包含我想要的) - 第一个测试蜇不匹配,在所有。
什么是正确的匹配模式?
我有两个可能的模式:如何可选地匹配一个组?
1.2 hello
1.2.3 hello
我想,如果后者存在匹配1
,2
和3
。
Optional items似乎是要走的路,但我pattern(\d)\.(\d)?(\.(\d)).hello
比赛只1.2.3 hello
(几乎是完美的:我得到四组,但第一,第二和第四包含我想要的) - 第一个测试蜇不匹配,在所有。
什么是正确的匹配模式?
你的图案包含一个数字匹配(\d)\.(\d)?(\.(\d))
一部分,那么一个.
,然后可选的数字(它可以是1或0),然后.
+数字。因此,它可以匹配1..2 hello
,但不匹配1.2 hello
。
您可以将第三组非捕获并使其可选:
(\d)\.(\d)(?:\.(\d))?\s*hello
^^^ ^^
如果您正则表达式引擎不允许非捕获组,使用捕获一个,只是您将必须从组4中获取值:
(\d)\.(\d)(\.(\d))?\s*hello
请参阅this regex。
请注意,我用hello
之前的.
替换为\s*
以匹配零个或多个空格。请注意,如果您需要在一行的开头匹配这些数字,您可以考虑使用^
(并取决于您的正则表达式引擎/工具,m
修改器)预先处理该模式。