正则表达式忽略括号之间的数据

时间:2021-03-01 20:43:39

标签: python regex

我用下面的空字符串替换字符 {}:,

此代码:

s = "\":{},"
print(s)
print(re.sub(r'\"|{|}' , "",s))

印刷品:

":{},
:,

这是预期的。

我正在尝试修改正则表达式以忽略开括号和闭括号之间的所有内容。因此对于字符串 "\":{},[test,test2]" 只应返回 :,[test,test2]

如何修改正则表达式,使正则表达式不应用 [] 之间包含的数据。

我尝试使用:

s = "\":{},[test1, test2]"
print(s)
print(re.sub(r'[^a-zA-Z {}]+\"|{|}' , "",s))

(来源:How to let regex ignore everything between brackets?

没有任何 , 值被替换。

2 个答案:

答案 0 :(得分:2)

假设您的括号是平衡/未转义的,您可以使用带有 negative lookahead 的正则表达式来断言匹配的字符不在 [...] 内:

>>> import re
>>> s = "\":{},[test1,test2]"
>>> print (re.sub(r'[{}",](?![^[]*\])', '', s))
:[test1,test2]

RegEx Demo

正则表达式详情:

  • [{}",]:匹配 [...] 中的其中一个字符
  • (?![^[]*\]):否定前瞻断言我们没有 ] 前面没有匹配任何 [ 之间,换句话说匹配的字符不在 {{1} 内}

答案 1 :(得分:1)

如果要删除不在方括号内的{},",可以使用

re.sub(r'(\[[^][]*])|[{}",]', r'\1', s)

参见regex demo。请注意,您可以向字符集 [{}"] 添加更多字符。如果需要添加连字符,请确保它是字符集中的最后一个字符。转义 \](如果不是第一个,就在 [ 之后)和 ^(如果它在第一个,就在 [ 之后)。

详情

  • (\[[^][]*]) - 捕获组 1:一个 [...] 子串
  • | - 或
  • [{}",] - {}," 字符。

使用您的示例输入查看 Python demo

import re
s = "\":{},[test1, test2]"
print( re.sub(r'(\[[^][]*])|[{}",]', r'\1', s) )
## => :[test1, test2]