我需要使用以下格式匹配字符串中的字符串“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
部分?
答案 0 :(得分:2)
你的背后隐藏着<
!
Lookbehinds看起来像这样:
(?<=...)
不喜欢这样:
(?=...)
那将是前瞻!
所以,
(?<=/).*(?=/poo)
答案 1 :(得分:0)
嘿,请尝试以下正则表达式:
(?<=/).*(?=/poo)
^^^^^^
它不会考虑结果中的第一个斜杠。
经过测试 regex101 :https://regex101.com/r/yzMkTg/1
按以下方式转换代码,它应该有效:
poo = "poo"
foo = re.match('(?<=/).*(?=/' + re.escape(poo) + ')', string).group(0)
快速浏览此链接,详细了解Positive lookahead
和Positive lookbehind
的行为
答案 2 :(得分:-1)
艾伦的答案解决了这个问题。
出于某种原因,我在我的脚本中获得了None
,并且我在RegExTester中获得了完全相同代码的正确输出,因此我猜测了那里&#39;我的剧本中出了点问题。
谢谢!