【发布时间】:2020-02-28 19:02:42
【问题描述】:
此正则表达式删除 $$ 之间的所有内容,但不删除 [ ]
r"([$@*[\]()&?]).*?(.)"
我认为这与 [ 和 ] 不是同一个字符有关,但我不确定出了什么问题。关于如何处理删除这些特殊字符 [ ] 之间的所有内容的任何想法?
https://regex101.com/r/pK9gX3/96
谢谢
【问题讨论】:
此正则表达式删除 $$ 之间的所有内容,但不删除 [ ]
r"([$@*[\]()&?]).*?(.)"
我认为这与 [ 和 ] 不是同一个字符有关,但我不确定出了什么问题。关于如何处理删除这些特殊字符 [ ] 之间的所有内容的任何想法?
https://regex101.com/r/pK9gX3/96
谢谢
【问题讨论】:
如果您有多个周围的字符,例如{}, (), [] .. 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 试图匹配[。解决此问题的一种方法是分别调用每个选项:
(\$[^$]*\$|\[[^]]*\])(.*)
请注意,这样做可以使第一组不捕获并将您的替换更改为\1。
【讨论】: