我是正则表达式的初学者,我试图用一个表达式来确定是否有两个相同的数字相邻,而这两个数字的前后是不同的.
例如
123456678应该匹配,因为有双6,
12345666678不应匹配,因为没有具有不同周围数字的双精度.
到目前为止,我只对1有效,只要double不在字符串的开头或结尾,但是我可以通过在开头和结尾添加一个字母来处理这个问题.
^.*([^1]11[^1]).*$
我知道我可以用[0-9]
代替1,但问题是它们都是相同的数字.
非常感谢.
我是正则表达式的初学者,我试图用一个表达式来确定是否有两个相同的数字相邻,而这两个数字的前后是不同的.
例如
123456678应该匹配,因为有双6,
12345666678不应匹配,因为没有具有不同周围数字的双精度.
到目前为止,我只对1有效,只要double不在字符串的开头或结尾,但是我可以通过在开头和结尾添加一个字母来处理这个问题.
^.*([^1]11[^1]).*$
我知道我可以用[0-9]
代替1,但问题是它们都是相同的数字.
非常感谢.
使用regex,使用基于(*SKIP)(*FAIL)
的模式的PyPi regex
模块要方便得多:
import regex
rx = r'(\d)\1{2,}(*SKIP)(*F)|(\d)\2'
l = ["123456678", "1234566678"]
for s in l:
print(s, bool(regex.search(rx, s)) )
看Python demo.输出:
123456678 True
1234566678 False
Regex details
(\d)\1{2,}(*SKIP)(*F)
-一个数字,然后同一数字出现两次或两次以上|
-或(\d)\2
——一个数字,然后是同一个数字.关键是匹配所有相同的3个或更多数字的块并跳过它们,然后匹配两个相同数字的块.