2017-07-27 81 views
-1

我需要幫助。 我有一個列表和字符串。Python正則表達式搜索數字旁邊的特定字符串

我想要做的事情是找到字符串中的所有數字,並且還匹配字符串中數字旁邊的單詞

str = 'Lily goes to school everyday at 9:00. Her House is near to her school. 
Lily's address - Flat No. 203, 14th street lol lane, opp to yuta mall, 
washington. Her school name is kids International.' 

list = ['school', 'international', 'house', 'flat no'] 

我寫了一個正則表達式,可以拉動數

x = re.findall('([0-9]+[\S]+[0-9]+|[0-9]+)' , str,re.I|re.M) 

輸出我想:

Numbers - ['9:00', '203', '14th'] 

Flat No.203(因爲flat no是旁邊203
14也是字符串,但我身邊不要它,因爲它不包含在列表中。

但我該如何寫正則表達式來使第二個條件滿足。即搜索 flat no是否在203之外,或者不在相同的正則表達式中。

+1

在python正則表達式中搜索postive lookahead斷言。將解決你的問題 –

+0

不要調用你的列表'list'這是一個類型名稱。 – Shai

+1

因爲有一個分離的點,所以'沒有'不在203旁邊。問題的規格不清楚。另外'9:00'不是一個數字。 – Gribouillis

回答

1

你去那裏:在Regex101.com

(\d{1,2}:\d{1,2})|(?:No\. (\d+))|(\d+\w{2})

演示可以發現here


它能做什麼,它是如何工作的?

我用兩個管道(|)收集不同數量的「類型」你想:

  • 第一變更((\d{1,2}:\d{1,2}) - 捕捉使用1-2位數字加一個冒號和另一組的1次-2數字(可能你只能使用2位數字)

  • 第二次更改(?:No\. (\d+)) - 給出的數字前面加上「No.」字樣(注意最後的空格),然後捕獲下面的數字,no事情多久(至少一位數字)

  • 第三個也是最後一個部分(\d+\w{2}) - 只需捕獲任意數量的數字(至少一個),後面跟兩個單詞字符。您可以進一步改進正則表達式的這部分,以僅匹配st,ndth後綴,但我將離開此直至您

也擺脫進一步不必要的比賽,你可以使用lookarounds,但再次 - 我會離開這個給你實現。

一般注意事項 - 而不是使用一個正則表達式來規則...... erm--匹配它們,你應該專注於創建許多簡單的正則表達式。這不僅可以提高可讀性,還可以提高正則表達式的可維護性。這還允許您分別搜索時間戳,建築物編號和位置編號,分別爲,輕鬆地允許您將此信息拆分爲特定變量。

相關問題