2 回答

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
您可以使用帶有捕獲組的正向前瞻來(lái)獲取匹配項(xiàng),并使用負(fù)向后向斷言直接左側(cè)的內(nèi)容不是 char az,從而開始匹配。
使用re.findall它將返回捕獲組中的值。
(?<![a-z])(?=([a-z]+_[a-z]+))
解釋
(?<![a-z])
否定后向查找,斷言直接左邊的不是 char az(?=
正向前瞻,斷言右邊是什么([a-z]+_[a-z]+)
捕獲組 1,匹配 1+ 字符 az _ 1+ 字符 az
)
關(guān)閉前瞻
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']

TA貢獻(xiàn)1998條經(jīng)驗(yàn) 獲得超6個(gè)贊
文檔re.findall
中明確提到了這一點(diǎn):
以字符串列表的形式返回字符串中模式的所有非重疊匹配項(xiàng)。
例如,'ash_tonic'
和'tonic_transit'
重疊,因此它們不會(huì)被視為兩個(gè)不同的匹配項(xiàng)。
添加回答
舉報(bào)