【发布时间】:2019-07-18 07:10:40
【问题描述】:
我正在尝试查找字符串中子字符串的所有出现并使用正则表达式打印它们的开始和结束索引。
例如, 字符串 = 'bbbcbb' 子='bb' 我必须得到 (0,1) (1,2) (4,5) 作为我的输出。
我的代码:
import re
matches = list(re.finditer(r'bb(?=[a-zA-Z]|$)', 'bbbcbb'))
输出:
[<_sre.SRE_Match object; span=(0, 2), match='bb'>,
<_sre.SRE_Match object;span=(4, 6), match='bb'>]
我浏览了https://docs.python.org/3/library/re.html 上的文档,据我了解,前瞻断言将起作用
- 在位置 0,它将匹配 'bb' 与 "bb" 后跟 "b"。即bbbcbb
- 在位置 1,它将匹配 'bb' 与“bb”后跟“c”。即bbbcbb
- 然后它将不匹配,直到位置 4 将匹配 'bb' 与 "bb" 后跟 $ .i.e. bbbcbb
为什么前瞻断言忽略了 (1,3) 位置的 b'bb'cbb?还是我对前瞻断言的理解有缺陷?
【问题讨论】:
-
您描述的算法可以使用
(?=bb)正则表达式完成。如果您希望它捕获bb,请使用(?=(bb))。 Link -
$是一个特殊字符,表示字符串的结尾。
标签: python regex python-3.x