【问题标题】:How to correctly parse closing parentheses如何正确解析右括号
【发布时间】:2015-11-10 19:49:15
【问题描述】:

我正在尝试使用以下命令解析字符串中的所有括号:

\((.+)\)

但不知道我应该如何重写下一个字符串的命令:

(你必须)为你的权利(参加派对)而战

我想同时提取 (You Gotta)(to Party)

【问题讨论】:

  • 请澄清:您是否希望能够同时匹配这两个集合,而不是只匹配整个字符串?
  • parse closing parentheses - 只要你提到 closure 你就有问题了。这需要open。这些不是凭空存在的,需要平衡的文本。 python可以做递归吗?

标签: python regex python-2.7 parsing


【解决方案1】:

您需要一个否定字符类而不是.+,然后使用re.findall()

>>> s="(You Gotta) Fight For Your Right (to Party)"
>>> 
>>> import re
>>> re.findall(r'\(([^()]+)\)',s)
['You Gotta', 'to Party']

请注意,您的正则表达式将匹配左括号和右括号之间的所有内容,其中包含以下部分:

(You Gotta) Fight For Your Right (to Party)
^-------this part will be matched --------^

但是通过使用否定字符类[^()]+,它将匹配括号之间的所有内容,但括号文字除外。这会使您的正则表达式引擎在每个右括号处停止。

(You Gotta) Fight For Your Right (to Party)
^         ^                      ^        ^

【讨论】:

  • 有什么想法可以提取括号内的文本,包括()
  • @SpanishBoy 如果你也想得到括号,你可以删除捕获组。所以将([^()]+)更改为[^()]+
猜你喜欢
  • 2019-04-14
  • 1970-01-01
  • 2016-05-21
  • 2019-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-21
  • 1970-01-01
相关资源
最近更新 更多