正则表达式匹配引号括起来的字符串文字而不匹配其他字符串

时间:2018-01-31 01:09:03

标签: python regex python-3.x

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

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

1 个答案:

答案 0 :(得分:3)

您可以尝试使用前导",而不是使用前瞻,这样就不会开始新的捕获了:

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