我是正则表达式的初学者,我试图用一个表达式来确定是否有两个相同的数字相邻,而这两个数字的前后是不同的.

例如

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个或更多数字的块并跳过它们,然后匹配两个相同数字的块.

regex demo.

Python-3.x相关问答推荐

Python根据阈值对数字进行分组

Paramiko SFTPClient get()和put()函数的通过/失败结果?

在Python代码中包含NAN值时,以两个矩阵计算RMSE

将自定义函数应用于 pandas 数据框的每一列

继承自 Counter 与 dict 的类实例的 Deepcopy

Python 舍入数字不准确

如何获取实例化 `types.GenericAlias` 的下标类?

Python base64.b32hexencode 未创建预期结果

过滤阈值大小数据以使用 Pyspark 或 Python 读取

Pygame 错误地渲染等距图像

找到操作系统的图片文件夹的 CLI

ImportError:无法从jinja2导入名称escape

有没有更好的方法来判断一个数字是否是两个数字的范围

带百分号的 Python 字符串格式

创建集合的 Python 性能比较 - set() 与 {} 文字

如何遍历某些扩展名的文件?

无论如何我可以在 Google colaboratory 中下载文件吗?

变量类型注解NameError不一致

将字符串拆分为最大长度 X 的片段 - 仅在空格处拆分

将 Python SIGINT 重置为默认信号处理程序