我正在解析其中可能包含任意数量的引用字符串的字符串(我正在解析代码,并试图避免PLY).我想知道是否引用了子字符串,并且我有子字符串索引.我最初的想法是使用re来查找所有匹配项,然后找出它们所代表的索引范围.
看起来我应该像正则表达式一样使用re \"[^\"]+\"|'[^']+'(我现在避免处理三重引号和此类字符串).当我使用findall()时,我得到了匹配字符串的列表,这有点不错,但我需要索引.
我的子字符串可能很简单c,我需要弄清楚这个特殊字符c是否实际被引用.
Dav*_*rby 131
这就是你想要的:( 来源)
Run Code Online (Sandbox Code Playgroud)re.finditer(pattern, string[, flags])返回一个迭代器,在字符串中的RE模式的所有非重叠匹配上产生MatchObject实例.从左到右扫描字符串,并按找到的顺序返回匹配项.结果中包含空匹配,除非它们触及另一个匹配的开头.
然后,您可以从MatchObjects获取开始和结束位置.
例如
[(m.start(0), m.end(0)) for m in re.finditer(pattern, string)]
Run Code Online (Sandbox Code Playgroud)
小智 6
要获取所有事件的索引:
S = input() # Source String
k = input() # String to be searched
import re
pattern = re.compile(k)
r = pattern.search(S)
if not r: print("(-1, -1)")
while r:
print("({0}, {1})".format(r.start(), r.end() - 1))
r = pattern.search(S,r.start() + 1)
Run Code Online (Sandbox Code Playgroud)