正则表达式用于匹配括在引号中的字符串文本而不匹配其他文本



所以我正在为python中的C语言子集编写一个简单的词法分析器。我正在使用 re 来匹配和查找我的所有令牌,但字符串文字标记匹配遇到问题。为了匹配我的字符串文字,我正在使用:r'(?<=").*(?=")我这样做是非包容性的,因为我想将我的双引号作为引号标记匹配,将它们之间的内容作为字符串文字标记进行匹配。如果字符串文字在一行中仅使用一次,它可以正常工作,但是如果我这样做"hello" int i "what is up"我最终会正确匹配hello但随后会匹配int i因为它也在双引号之间。我怎样才能防止这种情况。现在,我的所有输入都立即读入一行。

编辑:我发现了我可能的问题。我正在使用贪婪的表达式.*将其切换到.*?并且它匹配正确。它开始匹配为hello" int i "what is up,这就是发现它贪婪的地方。我的新正则表达式是:r'(?<=").*?(?=")现在有人看到任何可能的冲突吗?

您可以尝试以下方法(这将消耗最后一个",以便它不会启动新的捕获,而不是使用前瞻

(:
import re
text = '"hello"  int i "what is up"'
print(re.findall(r'"(.*?)"', text))
# ['hello', 'what is up']

最新更新