python - 正则表达式到“双重计数”字符
问题描述
给定一个由 0s、1s 和 2s 组成的字符串,例如'0010201'
: 我想要一个输出,它是任何系列,它是一个被任何数量(包括零)的 0 包围的一个。在这种情况下,所需的输出将是['0010', '01']
. 现在,代码re.findall("0*10*", "0010201")
将在该输入上正常工作。但是,给定字符串的一部分具有类似1001
(两个仅用零分隔)的形式,['100', '1']
当我希望它返回时,该正则表达式将返回,['100', '001']
这将“双重计算”两个中间的 0。我怎样才能做到这一点?
解决方案
您需要一个匹配重叠匹配的正则表达式,但您需要指定自定义左侧边界:它必须需要非0
字符或字符串开头。
您可以使用
re.findall(r"(?=(?<!0)(0*10*))", text)
细节
(?=
- 允许重叠匹配的积极前瞻开始:(?<!0)
- 如果在当前位置的左侧紧邻有一个0
(0*10*)
- 捕获第 1 组(的返回值re.findall
):零个或多个0
字符,1
然后又是零个或多个0
字符
)
- 前瞻结束。
请参阅Python 演示:
import re
rx = r"(?=(?<!0)(0*10*))"
print(re.findall(rx, "0010201")) # => ['0010', '01']
print(re.findall(rx, "1001")) # => ['100', '001']
推荐阅读
- performance - 无法使用 pypy 运行 python 文件
- python - 根据特定顺序从文件中读取文件
- wordpress - Facebook for WooCommerce 插件
- dataset - 有人可以帮我找到满足以下要求的数据集吗?
- flutter - 如何添加如图所示的弯曲模态底片?如何在其上方添加关闭按钮?飘飘然
- r - 使用 case_when() 和 filter() 根据 R 中一列中的值和另一列中的级别对数据帧进行子集化
- mysql - 为什么我的 SQL FOREIGN KEY 子句返回错误?
- javascript - 即使 gtag 是窗口对象的一部分,Javascript 也会抛出“Uncaught TypeError: gtag is not a function”
- unity3d - Unity 中的 GPGS 设置 - 构建错误
- google-drive-api - 检查 google drive 文件是否是 Google Docs、Sheets 和 Slides?