我需要使用以下格式匹配字符串中的字符串“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)
^^^^^^
它不会考虑结果中的第一个斜杠。
经过测试的regex101:https://regex101.com/r/yzMkTg/1
以下列方式转换代码,它应该工作:
poo = "poo"
foo = re.match('(?<=/).*(?=/' + re.escape(poo) + ')', string).group(0)
有关Positive lookahead
和Positive lookbehind
行为的更多信息,请快速浏览此链接
在你的背后,你错过了一个<
!
Lookbehinds看起来像这样:
(?<=...)
不是这样的:
(?=...)
那将是一个先行!
所以,
(?<=/).*(?=/poo)
艾伦的答案解决了这个问题。
出于某种原因,我在我的脚本中获得了None
,并且我在RegExTester中获得了完全相同代码的正确输出,所以我猜我的脚本有问题。
谢谢!