所以我正在为python中的C语言子集编写一个简单的词法分析器。我正在使用re来匹配并找到我的所有令牌,但是我的字符串文字令牌匹配问题。要匹配我使用的字符串文字:r'(?<=").*(?=")
我这样做是非包容性的,因为我想将我的双引号匹配为引用标记,并将它们之间的内容作为字符串文字标记。如果一个字符串文字只在一行中使用一次,但是如果我"hello" int i "what is up"
我最终正确地匹配hello
但是匹配int i
,因为它也在双引号之间,它可以正常工作。我怎么能阻止这个。现在我的所有输入都被立即读入一行。
编辑:
我发现了我可能遇到的问题。我使用了.*
的贪婪表达式,我将其切换为.*?
并且它正确匹配。它开始匹配为hello" int i "what is up
,这是发现它贪婪的地方。我的新正则表达式是:r'(?<=").*?(?=")
现在有人看到任何可能的冲突吗?
答案 0 :(得分:3)
您可以尝试使用前导"
,而不是使用前瞻,这样就不会开始新的捕获了:
import re
text = '"hello" int i "what is up"'
print(re.findall(r'"(.*?)"', text))
# ['hello', 'what is up']