匹配不同数量的字符之间的正则表达式

时间:2015-07-18 15:26:37

标签: regex

以下正则表达式在下面的示例中与“EXAMPLETEXT”匹配,但我希望能够使用\d*来匹配一个或多个数字,而不是\d\d。这可能还是有更好的方法?

字符串:

09.04.EXAMPLETEXT.14

正则表达式:

(?<=\.\d\d\.)(.*)(?=\.)

2 个答案:

答案 0 :(得分:4)

你不能在perl,java,python正则表达式中的lookbehind断言中使用*+?量词(它们不支持可变长度的lookbehind)。但是你可以在c#family中使用lookbehind中的那些符号。

如果您使用的是php或perl,则可以使用\K

\.\d*\.\K(.*)(?=\.)

所有语言的另一个黑客就是打印所有捕获的字符。

\.\d*\.(.*)\.

贪婪的例子:

>>> s = "09.043443.EXAMPLETEXT.14"
>>> re.search(r'\.\d*\.(.*)\.', s).group(1)
'EXAMPLETEXT'

非贪婪匹配的示例:

>>> re.search(r'\.\d*\.(.*?)\.', s).group(1)
'EXAMPLETEXT'

使用否定的char类。

>>> re.search(r'\.\d*\.([^.]*)\.', s).group(1)
'EXAMPLETEXT'

答案 1 :(得分:2)

你根本不需要使用lookbehind,这样的正则表达式可以工作:

(?:\d+\.)+(.*)(?:\.\d+)+

https://regex101.com/r/pP6lX7/1

或者,如果您希望能够匹配其他文本中的字符串

(?:\d+\.)+([^\s]*)(?:\.\d+)+

https://regex101.com/r/sB5mB2/1