2016-02-09 45 views
2

我正在做關於正則表達式的功課,並在OR上遇到了一些困難。 考慮以下字符串:在Python正則表達式中使用OR的最佳方式是什麼

avc7fsrd5vcc12vfscsrwt1qw7eetrs&fsrsy 

應該返回T1小號

fdjhads jhf&5672t3zcxvb,m654godjhfjdyeuyr123jfjjdjfjdfj77djsfhdjhfdsf99 

應該返回T3去123 77

,第一部分是提取噸,一些數字,然後提取s或去取決於先發生什麼。如果它走了,那麼我們需要提取兩個數字,否則停止。

這是我使用

'(t[0-9]).*?(go).*?([0-9]+).*?([0-9]+)|(t[0-9]).*?(s)' 

正則表達式,但是當我加的S到第二串並提取走的不是s這是行不通的。

任何幫助,將不勝感激。

+0

'那麼我們需要在_what_之後提取兩個數字? – sln

+0

對於第二個樣品't3 ...去... 123 ... 77',因爲654在'去'之前# – sln

+0

抱歉,您的權利! – Anonymous

回答

1

它相當簡單。第一次輪換優先於第二輪。
只要確保在出發前沒有s

(t[0-9])[^s]*?(go).*?([0-9]+).*?([0-9]+)|(t[0-9]).*?(s)

Formatted and tested:

(t [0-9])     # (1) 
    [^s]*? 
    (go)      # (2) 
    .*? 
    ([0-9]+)     # (3) 
    .*? 
    ([0-9]+)     # (4) 
| 
    (t [0-9])     # (5) 
    .*? 
    (s)       # (6) 
+0

感謝您的幫助。對於正則表達式我相當陌生。真的很感激它。 – Anonymous

+0

祝你好運! – sln

1

閱讀regex這裏:

print re.findall(r'(t\d+).*?(s|go)\D*(\d*)\D*(\d*)', s) 

輸出:

[('t3', 'go', '123', '77')] 
1

我認爲這是你需要的正則表達式:

     (t\d+).*?(go|s)\D*?(\d*)\D*?(\d*) 

它可以根據您的要求,如果我理解你的問題正確。對於第一次比賽

演示: http://regexr.com/3coi0

演示了第二節比賽 : http://regexr.com/3coht

對於理解提前正則表達式,我會參考更多的幫助你閱讀 https://www.talentcookie.com/2015/07/lets-practice-regular-expression https://www.talentcookie.com/2016/01/some-useful-regular-expression-terminologies/

相關問題