我正在寻找一个正则表达式,它区分包含括在括号中的数值的字符串和包含它们之外的字符串。问题是,括号可能相互嵌入:
因此,例如,表达式应匹配以下字符串:
但它不符合以下任何一项:
到目前为止,我已经尝试了
\ d [A-Za-z] \)
和像这样的简单事情。这个问题是它与示例2不匹配,因为它有一个(后面的字符串。
我怎么能解决这个问题?
答案 0 :(得分:1)
问题不在于模式匹配。这意味着正则表达式不是正确的工具。
相反,您需要进行词法分析和解析。有many libraries available for that job。
答案 1 :(得分:0)
这些类型的正则表达式并不总是很容易,但有时可以提供一种方法,只要输入保持一定的一致性。通常这样的模式应该有效:
(.*(\([\d]+[^(].*\)|\(.*[^)][\d]+.*\)).*)
<强>代码强>:
import re
p = re.compile(ur'(.*(\([\d]+[^(].*\)|\(.*[^)][\d]+.*\)).*)', re.MULTILINE)
result = re.findall(p, searchtext)
print(result)
<强>结果强>: