簡體   English   中英

Python正則表達式在兩個不同的順序匹配兩個字符串?

[英]Python regex match two string at two different order?

我想在以下字符串中匹配aaa bbbbbb 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']

如果你知道它總是aaabbb ,那么這樣的事情怎么樣?

>>> 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM