试图让python RegExp删除括号中的所有内容[abc]

2024-09-29 19:29:20 发布

您现在位置:Python中文网/ 问答频道 /正文

此regexp将删除$$之间的所有内容,但不会删除[]

r"([$@*[\]()&?]).*?(.)"

我认为这和(和)不是同一个角色有关,但我不确定到底出了什么问题。有没有关于如何处理删除这些特殊字符之间的所有内容的想法[]

enter image description here

https://regex101.com/r/pK9gX3/96

谢谢


Tags: httpscom角色内容regexp特殊字符regex101pk9gx3
2条回答

如果有多个周围字符,如{}, (), [] .. etc,请尝试以下代码:

import re
# list of surrounding characters to build a large regular expression 
surrounding = [('\$', '\$'), ('\[', '\]'), ('{', '}')]
text = """
$remove$text
[remove]text
"""

RE_PATTERN = '|'.join(r'{0}[^{0}]*?{1}.*?'.format(*s) for s in surrounding)
print(RE_PATTERN)  # \$[^\$]*?\$.*?|\[[^\[]*?\].*?|{[^{]*?}.*?
print(re.sub(RE_PATTERN,'', text))
# text
# text

您的正则表达式不工作,因为在第二种情况下\1正在尝试匹配[。解决这一问题的一种方法是分别调用每个选项:

(\$[^$]*\$|\[[^]]*\])(.*)

Demo on regex101

请注意,这样做可以使第一个组不被捕获,并将替换更改为\1

相关问题 更多 >

    热门问题