[英]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)
- Rd
、 Dr
、 Ave
或St
\.
- 一個點請參閱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.