Python 正则表达式回顾和回顾

Python regex lookbehind and lookahead

我需要从具有以下格式的字符串中匹配字符串 "foo":

string = "/foo/boo/poo"

我绑定了这段代码:

poo = "poo"
foo = re.match('.*(?=/' + re.escape(poo) + ')', string).group(0)

它给了我 /foo/boo 作为变量 foo 的内容(而不仅仅是 foo/boo)。

我试过这段代码:

poo = "poo"
foo = re.match('(?=/).*(?=/' + re.escape(poo) + ')', string).group(0)

我得到了相同的输出(/foo/boo 而不是 foo/boo)。

如何只匹配 foo/boo 部分?

嘿,试试下面的正则表达式:

(?<=/).*(?=/poo)
^^^^^^

它不会考虑结果中的第一个斜线。

已测试 regex101https://regex101.com/r/yzMkTg/1

按照以下方式转换您的代码,它应该可以工作:

poo = "poo"
foo = re.match('(?<=/).*(?=/' + re.escape(poo) + ')', string).group(0)

快速查看此 link 以获取有关 Positive lookaheadPositive lookbehind

行为的更多信息

http://www.rexegg.com/regex-quickstart.html

您的回顾中缺少 <

回顾看起来像这样:

(?<=...)

不是这样的:

(?=...)

那会是一个样子提前

所以,

(?<=/).*(?=/poo)