0

我需要re用另一个字符串替换括号内的点:

a = 'hello.mate(how.are.you)'

b = 'hello.mate(how|DOT|are|DOT|you)

我试图用/(突出括号的开头和/)结尾,但我不清楚如何捕捉中间的简单点。

最贴切的两个例子

这两个问题显然面临完全相同的问题,特别是问题 #2,但我似乎无法捕捉到一个点re.sub

正则表达式替换python中分隔符之间的文本

使用 Python 的正则表达式将浮点数的点替换为“点”

尝试的解决方案

基于上述示例的各种无效尝试包括:

b = re.sub(r'\(.\)','|DOT|', a)
b = re.sub(r'\(\.\)','|DOT|', a)
b = re.sub(r'\([.]\)','|DOT|', a)
b = re.sub(r'\([\.]\)','|DOT|', a)
4

3 回答 3

7

您可以嵌套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)
于 2019-06-11T12:23:11.990 回答
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'))

但我不明白为什么 dot 只是被捕获的

于 2019-06-11T12:52:46.457 回答
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|'))
于 2019-06-11T13:04:29.913 回答