python - 使用正则表达式替换重叠的子模式

标签 python regex

我有以下正则表达式替换:

input=re.sub( r"([a-zA-Z0-9])\s+([a-zA-Z0-9])" , r"\1*\2" , input )

我在字符串 "3 a 5 b" 上使用了正则表达式。

我返回 "3*a 5*b"

我想我应该返回 "3*a*5*b"

所以不知何故我的正则表达式替换相互干扰。

除了正则表达式的迭代运行之外,我还能做些什么来获得我想要的结果?

最佳答案

使用 lookahead assertion , (?=...),以免吃掉第二个模式:

In [33]: re.sub( r"([a-zA-Z0-9])\s+(?=[a-zA-Z0-9])" , r"\1*" , '3 a 5 b')
Out[33]: '3*a*5*b'

In [32]: re.sub( r"([a-zA-Z0-9])\s+(?=[a-zA-Z0-9])" , r"\1*" , "3 /a 5! b" )
Out[32]: '3 /a*5! b'

关于python - 使用正则表达式替换重叠的子模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15301832/

相关文章:

python - 在 python 中使用 re.findall() 的问题

python - 正则表达式匹配任何保持序列顺序的字符串,即使它不完整

正则表达式在 Angular 模板中无法按预期工作

javascript - 查找和替换双引号之间的换行符

python - 如何在 cherrypy 中使用全局变量?

python - scala:将元组引用传递给函数

javascript - 如何从字符串中删除数字?

python - headless Selenium 突然停止工作

python - 为什么我不能用 numba (cuda python) 获得一维数组的正确总和?

python - 使用来自 pandas DataFrame 的数据拟合 sklearn 的 SVM 分类器