替换python中括号之间的文本
我的字符串将包含()。我需要做的是更改括号之间的文本 示例字符串:替换python中括号之间的文本,python,regex,string,Python,Regex,String,我的字符串将包含()。我需要做的是更改括号之间的文本 示例字符串:“B.TECH(CS,IT)”。 在我的字符串中,我需要将括号内的内容更改为这样的内容B.TECH(欧洲经委会,欧洲电气工程师协会) 我试图解决这个问题的方法如下 reg = r'(()([\s\S]*?)())' a = 'B.TECH(CS,IT)' re.sub(reg,"(ECE,EEE)",a) 但是我得到了这样的输出 '(ECE,EEE)B(ECE,EEE).(ECE,EEE)T(ECE,EEE)E(ECE,EEE)
“B.TECH(CS,IT)”
。
在我的字符串中,我需要将括号内的内容更改为这样的内容<代码>B.TECH(欧洲经委会,欧洲电气工程师协会)
我试图解决这个问题的方法如下
reg = r'(()([\s\S]*?)())'
a = 'B.TECH(CS,IT)'
re.sub(reg,"(ECE,EEE)",a)
但是我得到了这样的输出
'(ECE,EEE)B(ECE,EEE).(ECE,EEE)T(ECE,EEE)E(ECE,EEE)C(ECE,EEE)H(ECE,EEE)((ECE,EEE)C(ECE,EEE)S(ECE,EEE),(ECE,EEE)I(ECE,EEE)T(ECE,EEE))(ECE,EEE)'
B.TECH(CS,IT)
有效输出应如下所示
'(ECE,EEE)B(ECE,EEE).(ECE,EEE)T(ECE,EEE)E(ECE,EEE)C(ECE,EEE)H(ECE,EEE)((ECE,EEE)C(ECE,EEE)S(ECE,EEE),(ECE,EEE)I(ECE,EEE)T(ECE,EEE))(ECE,EEE)'
B.TECH(CS,IT)
我遗漏了哪些内容以及如何正确替换文本。问题在于使用的是括号,在正则表达式中有另一种含义。它们被用作分组字符,以捕获输出 您需要将()转义为希望它们作为文字标记的位置。可以使用反斜杠字符转义字符:
\(
)
以下是一个例子:
reg = r'\([\s\S]*\)'
a = 'B.TECH(CS,IT)'
re.sub(reg, '(ECE,EEE)', a)
# == 'B.TECH(ECE,EEE)'
问题是,您使用的是括号,它在正则表达式中有另一种含义。它们被用作分组字符,用于捕获输出 您需要将()转义到希望它们作为文字标记的位置。您可以使用反斜杠字符转义字符:
\(
)
以下是一个例子:
reg = r'\([\s\S]*\)'
a = 'B.TECH(CS,IT)'
re.sub(reg, '(ECE,EEE)', a)
# == 'B.TECH(ECE,EEE)'
正则表达式不起作用的原因是,您正在尝试匹配括号,括号在正则表达式中被视为元字符。
()
实际上捕获了一个空字符串,并将尝试替换它。这就是您获得所看到的输出的原因
要解决这个问题,你需要逃离那些帕伦人——这是一种类似于
\(...\)
对于您的特定用例,我可以建议一种更简单的模式吗
In [268]: re.sub(r'\(.*?\)', '(ECE,EEE)', 'B.TECH(CS,IT)')
Out[268]: 'B.TECH(ECE,EEE)'
正则表达式不起作用的原因是,您正在尝试匹配括号,括号在正则表达式中被视为元字符。
()
实际上捕获了一个空字符串,并将尝试替换它。这就是您获得所看到的输出的原因
要解决这个问题,你需要逃离那些帕伦人——这是一种类似于
\(...\)
对于您的特定用例,我可以建议一种更简单的模式吗
In [268]: re.sub(r'\(.*?\)', '(ECE,EEE)', 'B.TECH(CS,IT)')
Out[268]: 'B.TECH(ECE,EEE)'
尝试将()转义到希望它们作为文字标记的位置。例如:
\([\s\s]*)\
(
和)
是分组字符,因此您需要明确表示它们是文字标记,而不是正则表达式运算符。您是否尝试过regex101.com或任何其他方法?它会向您显示exect结果,并“解释”您的正则表达式魔术。您应该转义()字符,以便从转义()您希望它们作为文字标记的位置。例如:\([\s\s]*)\)
(
和)
是分组字符,因此您需要明确表示它们是文字标记,而不是正则表达式运算符。您是否尝试过regex101.com或任何其他方法?它会向您显示exect结果,并“解释”您的正则表达式魔法。您应该转义()字符,以便从组中辨别出来