[英]Python regex match two string at two different order?
我想在以下字符串中匹配aaa bbb
和bbb aaa
:
aaa bbb bbb aaa
運用
match = re.search("^(?=.*(aaa))(?=.*?(bbb)).*$", subject, re.DOTALL | re.IGNORECASE)
請參閱https://www.regex101.com/r/vA0nB0/2
但它只匹配aaa bbb
。
我怎么能匹配bbb aaa
?
如果Python支持條件:
對於無序的東西,只需使用條件。
注意 - 更改組中的量詞以反映有多少項
需要匹配。 下面顯示了{2}
,它需要兩個項目。
您可以將其更改為{1,}
- 至少為1,或+
- 同樣的事情。
(?:.*?(?:((?(1)(?!))aaa.*?bbb)|((?(2)(?!))bbb.*?aaa))){2}
格式化 :
(?:
.*?
(?:
( # (1)
(?(1)
(?!)
)
aaa .*? bbb
)
| ( # (2)
(?(2)
(?!)
)
bbb .*? aaa
)
)
){2}
輸出:
** Grp 0 - ( pos 0 , len 21 )
aaa bbb bbb aaa
** Grp 1 - ( pos 0 , len 8 )
aaa bbb
** Grp 2 - ( pos 11 , len 10 )
bbb aaa
您可以嘗試以下簡單的正則表達式。
>>> import re
>>> s = 'aaa bbb bbb aaa'
>>> re.findall(r'aaa.*?bbb|bbb.*?aaa', s)
['aaa bbb', 'bbb aaa']
如果你知道它總是aaa
或bbb
,那么這樣的事情怎么樣?
>>> a = 'aaa bbb bbb aaa'
>>> match = re.findall("(aaa|bbb).+?(aaa|bbb)", a, re.DOTALL | re.IGNORECASE)
>>> match
[('aaa', 'bbb'), ('bbb', 'aaa')]
這是regex101鏈接: https ://www.regex101.com/r/qO3uD3/1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.