我需要用另一个字符串用re
替换括号内的点:
来自
a = 'hello.mate(how.are.you)'
至
b = 'hello.mate(how|DOT|are|DOT|you)
我尝试使用/(
突出显示方括号的开头,并使用/)
结束括号,但是我不清楚如何捕获中间的简单点。
两个最相关的示例
这两个问题显然都面临着完全相同的问题,尤其是问题2,但是我似乎无法在re.sub
中捕获单个点
Regex replace text between delimiters in python
Regex using Python to replace dot of floating numbers with "dot"
尝试的解决方案
基于上述示例的各种无效尝试包括:
b = re.sub(r'\(.\)','|DOT|', a)
b = re.sub(r'\(\.\)','|DOT|', a)
b = re.sub(r'\([.]\)','|DOT|', a)
b = re.sub(r'\([\.]\)','|DOT|', a)
答案 0 :(得分:6)
您可以嵌套re.sub
来首先将括号内的字符串匹配,然后用.
代替|DOT|
:
import re
a = 'hello.mate(how.are.you)'
s = re.sub(r'\((.*?)\)', lambda g: re.sub(r'\.', '|DOT|', g[0]), a)
print(s)
打印:
hello.mate(how|DOT|are|DOT|you)
答案 1 :(得分:0)
我尝试过类似的事情:
import re
a = 'hello.mate(.are.you)'
res = r'\([^\.\)]*(?:(?P<dot>\.)[^\.\)]*)+\)'
p = re.compile(res)
for m in re.finditer(p, a):
print(m.start('dot'), m.end('dot'))
但是我不明白为什么只有点被捕获了
答案 2 :(得分:0)
尝试一下
import re
a = 'hello.mate(how.are.you)'
content_in_brackets = re.findall(r'\((.*?)\)', a)
for con in content_in_brackets:
a = a.replace(con, con.replace('.', '|DOT|'))