首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中查找字符串中所有匹配项的开始和结束位置

在Python中查找字符串中所有匹配项的开始和结束位置
EN

Stack Overflow用户
提问于 2011-12-11 03:55:31
回答 3查看 5.7K关注 0票数 2

如果你有一个序列:

代码语言:javascript
复制
example='abcdefabcdefabcdefg'

和你的搜索结果:

代码语言:javascript
复制
searching_for='abc'

哪个函数会给你一个包含所有位置的列表?

代码语言:javascript
复制
positions=[(0,2),(6-8),(12-14)]

我创建了一个窗口列表,将“example”一分为三,从“abc”、“bcd”、“cde”开始。

代码语言:javascript
复制
windows=['abc', 'bcd', 'cde', 'def', 'efa', 'fab', 'abc', 'bcd', 'cde', 'def', 'efa', 'fab', 'abc', 'bcd', 'cde', 'def']

并使用for循环

代码语言:javascript
复制
for i in windows:
    if i == 'abc':

这就是我被卡住的地方。。。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-11 04:01:05

您可以使用regular expressions;match对象附带位置信息attached。使用Python 2的示例:

代码语言:javascript
复制
>>> import re
>>> example = 'abcdefabcdefabcdefg'
>>> for match in re.finditer('abc', example):
        print match.start(), match.end()
0 3
6 9 
12 15
票数 10
EN

Stack Overflow用户

发布于 2011-12-11 04:02:21

re模块提供了您所需的内容。

代码语言:javascript
复制
import re
print [(m.start(0), m.end(0)) for m in re.finditer('abc', 'abcdefabcdefabcdefg')]
票数 2
EN

Stack Overflow用户

发布于 2011-12-11 04:06:09

这可以通过一个列表理解来优雅地表达出来:

代码语言:javascript
复制
positions = [(i, i + len(searching_for) - 1)
             for i in xrange(len(example))
             if example[i:].startswith(searching_for)]

请注意,将结束索引点放在最后一个字符之后通常更有用,而不是您要求的最后一个字符(上面的代码提供了这一点)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8459412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档