我需要一个正则表达式来找到一串数字中匹配数字的确切数目。 (例如“正好是三个重复数字”)
在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之间是否存在一些默认标志不同?我找不到正则表达式或测试输入的差异。
答案 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.search
或three_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