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)
^^^^^^
它不会考虑结果中的第一个斜线。
已测试 regex101:https://regex101.com/r/yzMkTg/1
按照以下方式转换您的代码,它应该可以工作:
poo = "poo"
foo = re.match('(?<=/).*(?=/' + re.escape(poo) + ')', string).group(0)
快速查看此 link 以获取有关 Positive lookahead
和 Positive lookbehind
行为的更多信息
您的回顾中缺少 <
!
回顾看起来像这样:
(?<=...)
不是这样的:
(?=...)
那会是一个样子提前!
所以,
(?<=/).*(?=/poo)
我需要从具有以下格式的字符串中匹配字符串 "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)
快速查看此 link 以获取有关 Positive lookahead
和 Positive lookbehind
您的回顾中缺少 <
!
回顾看起来像这样:
(?<=...)
不是这样的:
(?=...)
那会是一个样子提前!
所以,
(?<=/).*(?=/poo)