亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何查找所有出現的子字符串?

如何查找所有出現的子字符串?

喵喔喔 2019-06-12 15:07:50
如何查找所有出現的子字符串?Pythonstring.find()和string.rfind()若要獲取字符串中的子字符串的索引,請執行以下操作。我想知道是否有string.find_all()它可以返回所有找到的索引(不僅從開始返回第一個索引,或者從末尾返回第一個索引)。例如:string = "test test test test"print string.find('test') # 0print string.rfind('test') # 15#this is the goalprint string.find_all('test')  # [0,5,10,15]
查看完整描述

5 回答

?
汪汪一只貓

TA貢獻1898條經驗 獲得超8個贊

沒有簡單的內置字符串函數來完成您想要的功能,但是您可以使用更強大的正則表達式:

import re[m.start() for m in re.finditer('test', 'test test test test')]#[0, 5, 10, 15]

如果你想找到重疊的匹配,前瞻會這樣做:

[m.start() for m in re.finditer('(?=tt)', 'ttt')]#[0, 1]

如果您想要一個沒有重疊的反向查找-所有,您可以將正向和負面的前瞻性組合成這樣的表達式:

search = 'tt'[m.start() for m in re.finditer('(?=%s)(?!.{1,%d}%s)' % (search, len(search)-1, search), 'ttt')]#[1]

re.finditer返回發電機,這樣您就可以更改[]在上面()獲得一個生成器,而不是一個列表,如果您只迭代結果一次,那么這個列表就會更高效。


查看完整回答
反對 回復 2019-06-12
?
米琪卡哇伊

TA貢獻1998條經驗 獲得超6個贊

>>> help(str.find)Help on method_descriptor:find(...)
    S.find(sub [,start [,end]]) -> int

因此,我們可以自己建立:

def find_all(a_str, sub):
    start = 0
    while True:
        start = a_str.find(sub, start)
        if start == -1: return
        yield start
        start += len(sub) # use start += 1 to find overlapping matcheslist(find_all('spam spam spam spam', 'spam')) # [0, 5, 10, 15]

不需要臨時字符串或正則表達式。


查看完整回答
反對 回復 2019-06-12
  • 5 回答
  • 0 關注
  • 896 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號