下面的正则表达式可以匹配我下面示例中的 "EXAMPLETEXT",但我想使用
字符串:
\d*
来匹配一个或多个数字,而不是 \d\d
。这可能吗,还是有更好的方法?字符串:
09.04.EXAMPLETEXT.14
正则表达式:
(?<=\.\d\d\.)(.*)(?=\.)
\d*
来匹配一个或多个数字,而不是 \d\d
。这可能吗,还是有更好的方法?09.04.EXAMPLETEXT.14
正则表达式:
(?<=\.\d\d\.)(.*)(?=\.)
在perl、java和python的正则表达式中,你不能在后顾断言中使用*
、+
或?
这些量词(它们不支持可变长度的后顾断言)。但是在c#家族中,你可以在后顾断言中使用这些符号。
如果你使用的是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'
使用否定字符类。
>>> re.search(r'\.\d*\.([^.]*)\.', s).group(1)
'EXAMPLETEXT'
\d\d
修改为\d*
,而不影响贪婪匹配的功能。 - Avinash Raj\d{2}
(或者可能是\d+
)吗?我不完全确定问题是什么,只是提供一些替代方案。 - maraca\K
是为了实现变长后行断言的功能。 - Avinash Raj(?:\d+\.)+(.*)(?:\.\d+)+
https://regex101.com/r/pP6lX7/1
或者,如果您希望能够匹配其他文本中的字符串:
(?:\d+\.)+([^\s]*)(?:\.\d+)+
((?:\d{2}\.)*)
。 - maraca