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

例如

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相关问答推荐

我想判断df_entry_log[AM_PM],并根据测试填充列

为什么我在BLE中的广告代码在发送包裹之间需要大约1秒

如何将从维基百科表中抓取的数据转换为字典列表?

两个 y 轴在零处对齐的 plotly barplot

Python3:是否可以将变量用作函数调用的一部分

双轴上的刻度和标签

Einsum 对于张量乘法很慢

Python defaultdict 在获取时返回 None,尽管使用默认值初始化

在气流中运行 DAG 时出现处理信号:ttou消息

预分配一个无列表

错误:预期语句,发现 py:Dedent

Tkinter 窗口显示(无响应)但代码正在运行

pandas 中 df.reindex() 和 df.set_index() 方法的区别

sys.stdin.readline() 和 input():读取输入行时哪个更快,为什么?

if 语句中冒号的语法错误

为什么等效的 Python 代码要慢得多

将 args、kwargs 传递给 run_in_executor

用于 unicode 大写单词的 Python 正则表达式

哪个更有效:Python 文档字符串还是类型提示?

十六进制字符串到 Python 3.2 中的带符号整数?