Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用正则表达式替换重叠的子模式_Python_Regex - Fatal编程技术网

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

Python 使用正则表达式替换重叠的子模式,python,regex,Python,Regex,我有以下正则表达式替换: input=re.sub( r"([a-zA-Z0-9])\s+([a-zA-Z0-9])" , r"\1*\2" , input ) 我在字符串“3a5b”上使用正则表达式 我回来了“3*a 5*b” 我想我应该回去“3*a*5*b” 所以我的正则表达式替换会互相干扰 除了正则表达式的迭代运行之外,我还能做些什么来获得我想要的结果?在使用Python时,正则表达式并不总是这项工作的最佳工具。对于上面描述的情况,Python提供了一种更简单、更可读、更易于维护的方法:

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

input=re.sub( r"([a-zA-Z0-9])\s+([a-zA-Z0-9])" , r"\1*\2" , input )
我在字符串
“3a5b”
上使用正则表达式

我回来了
“3*a 5*b”

我想我应该回去
“3*a*5*b”

所以我的正则表达式替换会互相干扰


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

在使用Python时,正则表达式并不总是这项工作的最佳工具。对于上面描述的情况,Python提供了一种更简单、更可读、更易于维护的方法:

>>> s = "3 a 5 b"
>>> '*'.join(s.split())
'3*a*5*b'
使用,
(?=…)
,以免吃掉第二个图案:

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'

input=re.sub(“,“*”,input)-这会得到你想要的东西不,@PurityLake,它不会。这将在字符串
“3/a 5!b”
中产生不正确的替换。对不起,我只是根据我得到的信息进行操作,我只认为你想用“*”字符替换空格。至少在我看来,@PurityLake,字符分组
[a-zA-Z0-9]清楚地传达了这些信息
另请参见:。一个很好的答案-不幸的是,O.P.在评论中更新了他的需求。不过,这确实回答了原来的问题。字符类
[a-zA-Z0-9]
明确排除了在不同字符之间替换空格,而您建议的答案则没有。啊,是的,我知道帖子已经更新了。根据新的信息,前瞻性断言听起来确实是最好的答案。请记住,当您将(组)更改为(?=lookahead)时,(组)不再存在。这就是为什么这个答案中没有\2。