Python正则表达式findall使用Lookahead

时间:2017-12-27 08:28:18

标签: python regex

我是正则表达式的新手,想了解如何使用 findall() lookahead 查找给定模式中的所有匹配项串。我遇到交替角色的问题。这是我想要的一个例子:

s = 'ababa4abaab'
p = 'aba'
print([ s[i:i+len(p)] for i in range(len(s)) if s[i:i+len(p)]==p])
['aba', 'aba', 'aba']

这是我对findall()的尝试:

import re
re.findall('aba', 'ababa4abaab')
['aba', 'aba']

它只返回2场比赛,但我想要全部三场比赛。我阅读this教程,但不太明白。我试过了

re.findall('(?=aba)', 'ababa4abaab')
['', '', '']

在这种情况下,有人可以告诉我如何使用这个先行概念并简要说明它是如何工作的吗?

2 个答案:

答案 0 :(得分:0)

我认为你只需要搜索后面有'ab'和'a', 你不需要把它当作'aba'来捕捉,你可以用这个向前看:

    var dict = array[indexPath.row]
    cell.lbl1.text = dict["address"] as? String
    cell.lbl2.text = dict["ad_created_date"] as? String
    cell.lbl3.text = dict["phone_number"] as? String
    cell.lbl4.text = dict["id"] as? String
    cell.lbl5.text = dict["ad_zip"] as? String

    let imageUrlString = dict["ad_path"]
    let imageUrl:URL = URL(string: imageUrlString as! String)!
    let imageData:NSData = NSData(contentsOf: imageUrl)!
    cell.img.image = UIImage(data: imageData as Data)



    return cell
}

给你3场比赛。

你也可以在一个组中捕获它,然后迭代它们中的每一个并连接'a',这样你就会以每个匹配所需的文本'aba'结束

ab(?=a)

答案 1 :(得分:0)

关于 findall 的官方文档说明了

  

"返回字符串中所有非重叠匹配的列表。"