我的应用程序中有来自外部的字符串,这些字符串可能带有引号:
Prefix content. "Some content goes here". More contents without quotes.
Prefix content. "Another "Additional" goes here". More contents without quotes.
Prefix content. "Just another "content". More contents without quotes.
关键是字符串带有引号,我需要正确处理这些引号。实际上,我需要捕捉引号中的所有内容。我尝试了.*(".*").*
和.*(".+").*
这样的模式,但它们似乎只捕获两个最接近的引号之间的内容。你知道吗
我不确定你想提取什么,所以我猜。我建议使用
partition
和rpartition
字符串方法。你知道吗这是你想要的吗?你知道吗
看起来你只需要从第一个报价到最后一个报价的所有内容,即使中间还有其他报价。这就足够了:
您的正则表达式中的前导和尾随
.*
是不需要的,并且前导的一个正在扭曲您的结果。它将首先消耗整个输入,然后后退足够远,让regex的其余部分匹配,这意味着(".*")
将只匹配最后两个引号。你知道吗你也不需要括号。您要查找的字符串部分现在是整个匹配项,因此可以使用
group(0)
而不是group(1)
检索它。如果字符串中可能有换行符,并且您也希望匹配这些换行符,则可以将其更改为:.
元字符通常不匹配换行符,但是(?s)
为regex的其余部分打开DOTALL
模式。你知道吗EDIT:我忘了提到在本例中应该使用
search()
方法,而不是match()
。match()
仅当在输入的最开始处找到匹配项时才起作用,就像添加了起始锚点一样(例如^".*"
)。search()
执行更传统的regex匹配,匹配可以出现在输入的任何地方。(ref)编辑:我现在看到另一个答案,我可能误解了你的问题。你知道吗
试着改变这个
至
?
将使搜索变得非贪婪,并在找到下一个匹配字符(即引号)时立即停止。我还删除了结尾处的.*,因为它将匹配字符串的其余部分(不考虑引号)。如果您也想匹配空引号,只需将+
更改为*
。使用re.findall
从引号中提取所有内容。你知道吗PS:我想你的最后一行是错的,因为它没有匹配的引号。你知道吗
相关问题 更多 >
编程相关推荐