【问题标题】:Regex for getting everything in between brackets, including parentheses [closed]正则表达式用于获取括号之间的所有内容,包括括号[关闭]
【发布时间】:2020-10-27 14:22:29
【问题描述】:

我有一个字符串,我正在尝试创建一个正则表达式,以便提取括号内的所有内容。这种字符串的一个例子如下

[-At(A),+CarAt(B),-CarAt(A),-InCar]

我正在使用的当前正则表达式是re.search(r'\[.*?\]', string),但这只会返回-At(A),-InCar 而不是-At(A),+CarAt(B),-CarAt(A),-InCar

我不确定为什么它匹配-At(A) 中的一组括号;我认为我拥有的正则表达式会起作用,因为它会匹配括号之间的所有内容。

如何将所有内容都放在原始字符串的括号内?

【问题讨论】:

  • 在您的问题中编辑一些您正在运行以获得此结果的最小精确代码。包括导入、使用要搜索的字符串初始化变量、打印结果并显示结果。

标签: python regex


【解决方案1】:

我认为问题出在问号上。因为问号,当它们出现在量词之后时,它们会变得“懒惰”。 所以尝试使用:

r'\[.*\]'

【讨论】:

【解决方案2】:

你没有说你想要包含的成员,但我怀疑这是最终的情况

为此,我发现最好先切掉或 .strip() 括号,然后再使用 .split() 这种字符串来获取其成员,然后再进行进一步验证

>>> s = "[-At(A),+CarAt(B),-CarAt(A),-InCar]"
>>> s = s.strip('[]')
>>> s
'-At(A),+CarAt(B),-CarAt(A),-InCar'
>>> values = s.split(',')
>>> values
['-At(A)', '+CarAt(B)', '-CarAt(A)', '-InCar']

使用正则表达式来验证单个结果通常是

  • 更容易编写和解释
  • 比re.findall() 更擅长突出不匹配,re.findall() 会默默地忽略不匹配
  • 比尝试一步完成操作(ex1ex2)在计算上的效率更高(尽管它可能不适合您的情况)
>>> import re
>>> RE_wanted = re.compile(r"[+-](At|Car|In){1,2}(\([A-Z]\))?")
>>> all((RE_wanted.match(a) for a in values))
True

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多