正则表达式-替换括号内的点

时间:2019-06-11 12:17:17

标签: python regex

我需要用另一个字符串用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)

3 个答案:

答案 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|'))