Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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_String - Fatal编程技术网

替换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结果,并“解释”您的正则表达式魔法。您应该转义()字符,以便从组中辨别出来