2013-01-17 25 views
0

我有一些輸入字符串。從輸入字符串中分離城市和州的正則表達式

Houston, TX 
(Houston, TX) 
South & West (Houston, TX) 
(South & West (Houston, TX)) 

我正在使用這種模式,但它不適用於所有四個。

.*\(*(.*),\s*(.*)\)* 

我只想休斯頓TX上面輸入的字符串。

規則是取出括號內的東西,或者如果沒有括號就是東西。結果列表中只有2個項目。

+5

什麼這裏的規則是什麼?如果有括號,則將括號中的內容取出,否則取整行? – mgilson

+0

你不能只說「我需要一個正則表達式來做到這一點」而不用英語定義規則。告訴我們規則是什麼,並向我們展示您嘗試過的正則表達式,然後我們可以從那裏幫助您。 –

+0

「我只是想讓休斯頓和TX擺脫上面的輸入字符串」應該是一個規則。 – Neutralizer

回答

2

看一看蟒Regular Expression operations網頁 - 我發現它有用學習如何做這些類型的東西的時候。

我不知道,如果你想分離出城&狀態或沒有,但你可以這樣做使用groups像這樣:

import re 

string = ('Houston, TX ' + 
     '(San Francisco, CA) ' + 
     'South & West (Houston, TX) ' + 
     '(South & West (Houston, TX))') 

matches = re.findall("([\w\s]+),\s(\w+)", string) 
for match in matches: 
    print 'City: ' + match[0] + ', State: ' + match[1] 

輸出:

City: Houston, State: TX 
City: San Francisco, State: CA 
City: Houston, State: TX 
City: Houston, State: TX 

正則表達式:

([\w\s]+)組1:用空格匹配多個單詞

,\s逗號後面有一個空格

(\w+)組2:匹配單個字

+0

對不起,但我也應該添加狀態可能不總是2個字符那裏。它會繼續工作嗎? – Neutralizer

+0

我修改了我的答案來處理超過2個字符的狀態,並解釋了我正在使用的正則表達式。 –

+0

你爲什麼不使用。 :) – Neutralizer

1
>>> import re 
>>> A="Houston, TX (Houston, TX) South & West (Houston, TX) Los Angeles, CA Los Angeles" 
>>> re.findall("\w[A-Za-z ]+, [A-Z]{2}",A) 
['Houston, TX', 'Houston, TX', 'Houston, TX', 'Los Angeles, CA'] 

\w =將匹配所有名稱以一個字母

[A-Za-z ]+ =將匹配空間

所有名稱

, [A-Z]{2} =會匹配所有的縮寫(兩個大寫字母)

+2

當與'洛杉磯,CA'匹配時炸燬 – NullUserException

+0

我用新的'regex'編輯我的答案 – Suku

2

我想我會這樣做的兩個步驟:

in_paren = re.compile(r'(?:\()([^\)\(]+)(?:\))') 
match = in_paren.search(ss) 
parts = match.group(1) if match else ss 
city,state = parts.split(',') 

這是作爲一個功能:

>>> def find_city_state(ss): 
...  match = in_paren.search(ss) 
...  parts = match.group(1) if match else ss 
...  return [x.strip() for x in parts.split(',')] 
... 
>>> for x in ("Houston, TX","(Houston,TX)","South & West (Houston, TX)","(South & West (Houston, TX))"): 
...  print find_city_state(x) 
... 
['Houston', 'TX'] 
['Houston', 'TX'] 
['Houston', 'TX'] 
['Houston', 'TX'] 
+0

添加第四個輸入字符串 – Neutralizer

+0

@UmairAshraf - 我修改了我的正則表達式來處理它。現在,我的正則表達式只採用最內層的括號分組。 – mgilson

+0

+1我喜歡你的正則表達式和'?:'的使用 - 我甚至沒有注意到其他答案,直到我刷新頁面。 –