簡體   English   中英

python 的正則表達式:如何在單詞之間提取字符串?

[英]Regex for python: how do I extract a string between words?

假設我有一句話:

Meet me at 201 South First St. at noon

我想得到這樣的地址:

South First

什么是合適的正則表達式? 我目前有這個,但它不工作:

 x = re.search(r"\d+\s?=([A-Z][a-z]*)\s(Rd.|Dr.|Ave.|St.)",searchstring)

其中 searchstring 是句子。 地址前面總是有 1 個或多個數字,后跟一個空格,然后是 Rd。 Dr. Ave. 或 St. 地址也總是以大寫字母開頭。

第一組,您嘗試匹配地址的部分是[AZ][az]* ,它表示一個大寫字母后跟任何小寫字母。 您可能想要的是任何大寫或小寫字母或空格: [A-Za-z ]* 另請注意,第二組中的點表示任何字符,而不是文字. ,所以你必須逃避它。 解決方案如下所示:

>>> re.search(r'\d+\s?([A-Za-z ]*)\s+(Rd|Dr|Ave|St)\.', 'Meet me at 201 South First St. at noon')[1]
'South First'

或者只是使用. 接受任何東西。

>>> re.search(r'\d+\s?(.*?)\s+(Rd|Dr|Ave|St)\.', 'Meet me at 201 South First St. at noon')[1]
'South First'

您可以使用

\d+\s*([A-Z].*?)\s+(?:Rd|Dr|Ave|St)\.

請參閱正則表達式演示

細節

  • \d+ - 一位或多位數字
  • \s* - 0 個或更多空格
  • ([AZ].*?) - 捕獲組 #1:一個大寫的 ASCII 字母,然后是除換行符之外的任何 0 個或多個字符,盡可能少
  • \s+ - 1+ 個空格
  • (?:Rd|Dr|Ave|St) - RdDrAveSt
  • \. - 一個點

請參閱Python 演示

m = re.search(r'\d+\s*([A-Z].*?)\s+(?:Rd|Dr|Ave|St)\.', text)
if m:
    print(m.group(1)) 

Output: South First

方法如下:

import re
s = 'Meet me at 201 South First St. at noon'
print(re.findall('(?<=\d )[A-Z].*(?= d.|Dr.|Ave.|St.)', s)[0])

Output:

'South First'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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