正则表达式代码不能在python中工作

时间:2017-02-17 16:33:22

标签: python regex python-3.4

import re
st=input()  #The input string
ss=input()  #The substring to be searched
lss=len(ss)
lst=len(st)
x=lst-lss
for i in range(x):
    r=re.search(r'(%s)'%ss,st,i)
    if r:
        print(r.start(),r.end())

以上是代码是对任务的响应。任务是:

给出字符串S.

我需要在S中找到字符串k的开头和结尾的索引。

如果输入为:

aaadaa
aa

输出应为:

(0, 1)  
(1, 2)
(4, 5) 

我知道我写的代码是错误的,因为我没有得到所需的输出。我在循环后经过并再次通过该行。我无法说服自己这是错的。我只是想知道为什么for循环后的代码不起作用? 有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

您应首先查看re.search()的文档,其第三个参数为flag

在你的情况下,你正在寻找重叠结果,我意识到没有直接的解决方案,所以我写了一个递归

import re
string = input()  # The input string
pattern = input()  # The substring to be searched

def match(pattern, string, startIdx=0):
    if startIdx <= len(string) - len(pattern):
        res = re.search(pattern, string[startIdx:])
        if res is not None:
            print(res.start() + startIdx, res.end() + startIdx - 1)
            return match(pattern, string, startIdx + res.start() + 1)


match(pattern, string)

,其输出为

0 1
1 2
4 5

应该按照您的预期完成工作。

我检查了预先存在的解决方案,但它们不符合您的要求:

  • re.finditer只能执行非重叠搜索。
  • re.findall执行重叠搜索,但无法检索索引。
  • re.finditerre.findalllook ahead仅返回匹配的文字。

我想编写这个自己的函数是最好的方法。

很好的问题,但是。