Python 在可能的多个括号中查找字符串?
我正在寻找一个正则表达式,它可以区分包含括号内数值的字符串和包含括号外数值的字符串。问题是,括号可能相互嵌入: 例如,表达式应匹配以下字符串:Python 在可能的多个括号中查找字符串?,python,regex,Python,Regex,我正在寻找一个正则表达式,它可以区分包含括号内数值的字符串和包含括号外数值的字符串。问题是,括号可能相互嵌入: 例如,表达式应匹配以下字符串: 嘿(例1) 还有(这个(onetoo2(硬))) 但是(这里是一个(更难的)可能是23)呵呵) 但它不应与以下任何一项匹配: 这(一)是错误的 如何(继续)与(多个)3方(Hesse(周围)) 到目前为止我已经试过了 \d[A-Za-z]\) 像这样简单的事情。这一个的问题是它与示例2不匹配,因为它后面有一个(字符串) 我如何解决这个问题呢?这些
- 嘿(例1)
- 还有(这个(onetoo2(硬)))
- 但是(这里是一个(更难的)可能是23)呵呵)
- 这(一)是错误的
- 如何(继续)与(多个)3方(Hesse(周围))
我如何解决这个问题呢?这些类型的正则表达式并不总是那么容易,但有时只要输入保持一定的一致性,就有可能找到一种方法。通常这样的模式应该可以工作:
(.*(\([\d]+[^(].*\)|\(.*[^)][\d]+.*\)).*)
代码:
import re
p = re.compile(ur'(.*(\([\d]+[^(].*\)|\(.*[^)][\d]+.*\)).*)', re.MULTILINE)
result = re.findall(p, searchtext)
print(result)
结果:
import re
p = re.compile(ur'(.*(\([\d]+[^(].*\)|\(.*[^)][\d]+.*\)).*)', re.MULTILINE)
result = re.findall(p, searchtext)
print(result)
问题不在于模式匹配。这意味着正则表达式不是实现这一点的合适工具 相反,你需要词法分析和解析
你可以试试or库。在我看来,你正在寻找一个lexer和parser.eeg flex和bison.In string
如何(继续)使用(多个)3parent(heses(around))
数字已经被外部的()
包围了。你有什么规则来区分它与但是(这里是(更难的)一个)可能是23)呵呵)?因为两者看起来相似。应该很难使用正则表达式,因为即使检测正确的括号嵌套也超出了FSA和常规语言的范围。它是上下文无关的。嵌套括号是难以用正则表达式处理的典型例子;考虑不同的方法。它可能更容易。只计算数字前的开括号和闭括号的数量。正如上面的评论中所提到的,正则表达式不是最好的方法。我认为这将在hello(1(世界))上失败
这应该与OPs描述相匹配。是的,很可能,但模式可以适应。希望他们能从中吸取一些教训……这就是目标。谢谢。