Joh*_*lis 5 regex lookbehind regex-lookarounds
我需要从具有以下格式的字符串中匹配字符串“ foo”:
string = "/foo/boo/poo"
Run Code Online (Sandbox Code Playgroud)
我绑了这段代码:
poo = "poo"
foo = re.match('.*(?=/' + re.escape(poo) + ')', string).group(0)
Run Code Online (Sandbox Code Playgroud)
它为我/foo/boo提供了foo变量的内容(而不是just foo/boo)。
我尝试了这段代码:
poo = "poo"
foo = re.match('(?=/).*(?=/' + re.escape(poo) + ')', string).group(0)
Run Code Online (Sandbox Code Playgroud)
我得到的是相同的输出(/foo/boo而不是foo/boo)。
我如何只匹配foo/boo零件?
All*_*lan 14
嘿尝试以下正则表达式:
(?<=/).*(?=/poo)
^^^^^^
Run Code Online (Sandbox Code Playgroud)
它不会考虑您在结果中的第一个斜线。
测试regex101:https : //regex101.com/r/yzMkTg/1
按以下方式转换您的代码,它应该可以工作:
poo = "poo"
foo = re.match('(?<=/).*(?=/' + re.escape(poo) + ')', string).group(0)
Run Code Online (Sandbox Code Playgroud)
快速浏览一下这个链接有关的行为的详细信息Positive lookahead和Positive lookbehind
http://www.rexegg.com/regex-quickstart.html
您<在背后看起来缺少一个!
Lookbehinds看起来像这样:
(?<=...)
Run Code Online (Sandbox Code Playgroud)
不像这样:
(?=...)
Run Code Online (Sandbox Code Playgroud)
那将是未来!
所以,
(?<=/).*(?=/poo)
Run Code Online (Sandbox Code Playgroud)