我正在编写一个 python 正则表达式,它通过文本文档查找引用的字符串(从黑盒记录的航空公司飞行员的引用)。我首先尝试使用以下规则编写正则表达式:
返回引号之间的内容。
如果它以单人打开,则仅在以单人关闭时返回。
如果它以双精度打开,则仅在以双精度关闭时返回。
例如,我不想匹配“hi there”或“hi there”,而是“hi there”和“hi there”。
我使用包含以下内容的测试页面:
CA "Runway 18, wind 230 degrees, five knots, altimeter 30."
AA "Roger that"
18:24:10 [flap lever moving into detent]
ST: "Some passenger's pushing a switch. May I?"
所以我决定从简单的开始:
re.findall('("|\').*?\\1', page)
########## /("|').*?\1/ <-- raw regex I think I'm going for.
这个正则表达式的行为非常出乎意料。
我以为会:
- ( " | " ) 匹配单引号或双引号,另存为反向引用 /1。
- .*? 匹配非贪心通配符。
- \1 匹配它在反向引用 \1 中找到的任何内容(第一步)。
相反,它返回一个引号数组,但从不返回任何其他内容。
['"', '"', "'", "'"]
我真的很困惑,因为等效的(afaik)正则表达式在 VIM 中工作得很好。
\("\|'\).\{-}\1/)
我的问题是:
为什么它只返回括号内的匹配项?这是我对反向引用理解的缺陷吗?如果是这样,为什么它可以在 VIM 中工作?
以及如何编写我在 python 中寻找的正则表达式?
谢谢您的帮助!