【问题标题】:Regex to ignore data between brackets正则表达式忽略括号之间的数据
【发布时间】:2021-03-01 20:43:39
【问题描述】:

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

这段代码:

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))

(src:How to let regex ignore everything between brackets?)

没有任何, 值被替换。

【问题讨论】:

  • 对于您的示例,re.sub(r'[{}"]', '', s) 不起作用吗?

标签: python regex


【解决方案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]

【讨论】:

  • 谢谢,我也希望替换 [ ] 之外的任何 ','
【解决方案2】:

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

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

RegEx Demo

正则表达式详细信息:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 2019-02-08
    • 2011-06-22
    • 2012-03-02
    • 1970-01-01
    相关资源
    最近更新 更多