regex101.com表达式在实际的python中不起作用

时间:2019-12-04 05:50:12

标签: python regex

我需要一个正则表达式来找到一串数字中匹配数字的确切数目。 (例如“正好是三个重复数字”)

regex101 I got a functioning regular expression (^|(.)(?!\2))(\d)\3{2}(?!\3)

但是当我在python3.6 shell中尝试时,它失败了,match返回None:

import re
three_char_re  = re.compile("(^|(.)(?!\2))(\d)\3{2}(?!\3)")
print(three_char_re.match("14551114"))

在我的python环境和regex101之间是否存在一些默认标志不同?我找不到正则表达式或测试输入的差异。

3 个答案:

答案 0 :(得分:3)

这里有两个问题:

对Python正则表达式使用原始字符串(请参见https://docs.python.org/3/reference/lexical_analysis.html)。提示:”\d”不是反斜杠,后跟“ d”。像这样更改它:

three_char_re  = re.compile(r"(^|(.)(?!\2))(\d)\3{2}(?!\3)")

是否注意到它是compile(r”...”),而不是compile(“...”)?简短的版本是,它保留了反斜杠。

第二,使用three_char_re.searchthree_char_re.find_all而不是.match,以便您可以找到不在输入字符串开头的匹配项。

答案 1 :(得分:0)

import re
three_char_re  = re.compile(r"(^|(.)(?!\2))(\d)\3{2}(?!\3)")
print(three_char_re.findall("14551114"))

输出:[('5', '5', '1')]

您需要使用findall,因为match从第一个字符开始,而您的正则表达式与第一个字符不匹配。

答案 2 :(得分:0)

您需要将模式声明为原始字符串,以转义带有前缀\的{​​{1}}字符。

以下模式将搜索前三个连续的相同数字

r