可能在多个括号中查找字符串?

时间:2016-03-06 20:53:21

标签: python regex

我正在寻找一个正则表达式,它区分包含括在括号中的数值的字符串和包含它们之外的字符串。问题是,括号可能相互嵌入:

因此,例如,表达式应匹配以下字符串:

  • 哎(例1)
  • 还(在此(onetoo2(硬)))
  • ,但(在此(为(a(硬)之一)maybe23)鹤鹤)

但它不符合以下任何一项:

  • 这(一个)is22misleading
  • 如何(上至(去)),与(多)3parent(heses(左右))

到目前为止,我已经尝试了

  

\ d [A-Za-z] \)

和像这样的简单事情。这个问题是它与示例2不匹配,因为它有一个(后面的字符串。

我怎么能解决这个问题?

2 个答案:

答案 0 :(得分:1)

问题不在于模式匹配。这意味着正则表达式不是正确的工具。

相反,您需要进行词法分析和解析。有many libraries available for that job

您可以尝试parsingpyparsing个库。

答案 1 :(得分:0)

这些类型的正则表达式并不总是很容易,但有时可以提供一种方法,只要输入保持一定的一致性。通常这样的模式应该有效:

(.*(\([\d]+[^(].*\)|\(.*[^)][\d]+.*\)).*)

<强>代码

import re

p = re.compile(ur'(.*(\([\d]+[^(].*\)|\(.*[^)][\d]+.*\)).*)', re.MULTILINE)

result = re.findall(p, searchtext)
print(result)

<强>结果

https://regex101.com/r/aL8bB8/1