作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
尝试使用相当长的正则表达式,但它归结为这一小部分与我的预期不符。
>>> re.search(r'(foo)((?<==)bar)?', 'foo').groups()
('foo', None)
>>> re.search(r'(foo)((?<==)bar)?', 'foo=bar').groups()
('foo', None)
第一个是我想要的,第二个应该返回 ('foo', 'bar')
。
我怀疑我只是误解了lookbehinds是如何工作的,一些解释会很好。
最佳答案
目标后面的查找永远不会包含在匹配中 - 它应该充当 anchor ,但实际上不会被正则表达式消耗。
仅当当前位置位于目标之前时,后视模式才应该匹配。在您的情况下,匹配字符串中的“foo”后,当前位置位于“=”,前面没有“=” - 它前面有“o”。
了解这一点的另一种方法是查看 re documentation和阅读
Note that patterns which start with positive lookbehind assertions will never match at the beginning of the string being searched;
在匹配 foo
后,您的后面将尝试匹配字符串(其余部分)的开头 - 这永远不会起作用。
其他人建议的正则表达式可能会更好地为您服务,但我认为您可能正在寻找
>>> re.search('(foo)(=(bar))?', 'foo=bar').groups()
('foo', '=bar', 'bar')
如果您发现额外的组有点烦人,您可以省略内部的“()”并直接从匹配组中删除第一个字符...
关于python - python 正则表达式中断言背后的积极查找问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1465246/
谁能解释当应用程序通过 802.11 WiFi 网络发送 UDP 单播数据报时它是如何工作的?假设非阻塞 UDP 套接字。具体而言,假设 802.11n 或 802.11ac 以及相当新的 Linux
我是一名优秀的程序员,十分优秀!