2014-09-29 51 views
-6

我是新來的蟒蛇。任何人可以幫助我,我怎麼可以創建給出一個字符串列表,像這樣的正則表達式:如何理解python的正則表達式?

test_string = "pero pero CC 
    tan tan RG 
    antigua antiguo AQ0FS0 
    que que CS 
    según según SPS00 
    mi mi DP1CSS 
    madre madre NCFS000" 

如何返回一個元組是這樣的:

> ([madre, NCFS00],[antigua, AQ0FS0]) 

我想用回字它相關的給定test_string標籤,這是我做了什麼:

# -- coding: utf-8 -- 
import re 


#str = "pero pero CC " \ 
    "tan tan RG " \ 
    "antigua antiguo AQ0FS0" \ 
    "que que CS " \ 
    "según según SPS00 " \ 
    "mi mi DP1CSS " \ 
    "madre madre NCFS000" 

tupla1 = re.findall(r'(\w+)\s\w+\s(AQ0FS0)', str) 
print tupla1 

tupla2 = re.findall(r'(\w+)\s\w+\s(NCFS00)',str) 
print tupla2 

輸出如下:

[( '安提瓜', 'AQ0FS0')] [( '馬德雷', 'NCFS00')]

與此輸出的問題是,如果我通過它沿test_string我需要保留「訂單「或」發生「的標籤(即我只能打印一個元組,當且僅當它們具有以下順序:AQ0FS0和NCFS000換句話說:女性形容詞,女性名詞)。

+0

爲什麼不''[según,SPS00]'?換句話說,是什麼讓'[madre,NCFS00]'和'[antigua,AQ0FS0]'匹配? – Sam 2014-09-29 22:01:43

+3

嘗試像regex101.com網站。 – 2014-09-29 22:02:30

+0

目前我只想返回帶有單詞的標籤AQ0FS0和NCFS00。我想我知道如何創建一個正則表達式給定這些標籤,可能我需要創建更多的正則表達式,但這只是一個例子,如何處理這個任務。 – 2014-09-29 22:05:40

回答

1
^([a-zA-Z]+)\s+[a-zA-Z]+\s+([\w]+(?=\d$)\d) 

真的不知道該選擇的基礎,但仍然可以得到它喜歡this.Just搶captures.Dont忘記設置標誌gm。看到演示。

http://regex101.com/r/nA6hN9/38

+0

爲什麼這麼複雜呢? '(\ S +)\ s + \ S + \ s +(\ S +)'是非常容易的。 – isedev 2014-09-29 22:09:16

+0

@isedev這將給所有lines.OP只想'2'.just看到返回元組 – vks 2014-09-29 22:09:55

+0

哈哈 - 好點,沒有正確讀取評論。 – isedev 2014-09-29 22:11:13