以下正则表达式在下面的示例中与“EXAMPLETEXT”匹配,但我希望能够使用\d*
来匹配一个或多个数字,而不是\d\d
。这可能还是有更好的方法?
字符串:
09.04.EXAMPLETEXT.14
正则表达式:
(?<=\.\d\d\.)(.*)(?=\.)
答案 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+)+