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

3
下面的正则表达式可以匹配我下面示例中的 "EXAMPLETEXT",但我想使用 \d* 来匹配一个或多个数字,而不是 \d\d。这可能吗,还是有更好的方法?
字符串:
09.04.EXAMPLETEXT.14

正则表达式:

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

非常简单:([0-9.])(.?)([0-9.]*) - maraca
如果您总是有两个数字后跟一个点(而不知道有多少个),那么有一种更好的方法来做到这一点:((?:\d{2}\.)*) - maraca
那个最后一个可以工作了,非常感谢。 - Arno
我没有意识到正则表达式在不同的编程语言中有些微不同,并且regex101可以让你选择你的语言。 - Arno
啊,我在下面找到了Jan的答案,本来是在寻找在注释中添加标记的方法,糟糕。 - Arno
显示剩余6条评论
2个回答

4

在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'

@maraca,我刚刚将他的正则表达式\d\d修改为\d*,而不影响贪婪匹配的功能。 - Avinash Raj
1
@AvinashRaj 好的,但是不应该是\d{2}(或者可能是\d+)吗?我不完全确定问题是什么,只是提供一些替代方案。 - maraca
使用\K是为了实现变长后行断言的功能。 - Avinash Raj

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接