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

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

如果字符串已經匹配,正則表達式是否會省略字符串的一部分?

如果字符串已經匹配,正則表達式是否會省略字符串的一部分?

嗶嗶one 2024-01-16 15:14:57
Python 3.8.2 手頭的任務很簡單:匹配由單個下劃線分隔的小寫字符。所以模式可以是r"[a-z]+_[a-z]+"現在我的問題是我希望re.findall()將以下所有內容配對:“ash_tonic_transit_so_kern_err_looo_”我沒有將每個下劃線周圍的所有單詞('ash_tonic','tonic_transit','transit_so'等)配對,而是得到三對:['ash_tonic','transit_so','kern_err']一旦找到匹配項,python 是否會重新省略部分字符串,而不是再次運行搜索?import redef match_lower(s):    patternRegex = re.compile(r'[a-z]+_[a-z]+')    mo =  patternRegex.findall(s)    return moprint(match_lower('ash_tonic_transit_so_kern_err_looo_'))
查看完整描述

2 回答

?
慕仙森

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

您可以使用帶有捕獲組的正向前瞻來獲取匹配項,并使用負向后向斷言直接左側的內容不是 char az,從而開始匹配。

使用re.findall它將返回捕獲組中的值。

(?<![a-z])(?=([a-z]+_[a-z]+))

解釋

  • (?<![a-z])否定后向查找,斷言直接左邊的不是 char az

  • (?=正向前瞻,斷言右邊是什么

    • ([a-z]+_[a-z]+)捕獲組 1,匹配 1+ 字符 az _ 1+ 字符 az

  • )關閉前瞻

正則表達式演示|?Python演示

import re

?

regex = r"(?<![a-z])(?=([a-z]+_[a-z]+))"? ? ?

test_str = "ash_tonic_transit_so_kern_err_looo_"? ? ?

print(re.findall(regex, test_str))

輸出


['ash_tonic', 'tonic_transit', 'transit_so', 'so_kern', 'kern_err', 'err_looo']


查看完整回答
反對 回復 2024-01-16
?
米琪卡哇伊

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

文檔re.findall中明確提到了這一點:

以字符串列表的形式返回字符串中模式的所有非重疊匹配項。

例如,'ash_tonic''tonic_transit'重疊,因此它們不會被視為兩個不同的匹配項。


查看完整回答
反對 回復 2024-01-16
  • 2 回答
  • 0 關注
  • 163 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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