我需要找到一个正则表达式,该正则表达式将从下面的字符串中提取城市名称。 字符串的顺序是餐厅名称,地址,城市,电话,美食类型
Chinois on Main 2709 Main St. Santa Monica 310-392-9025 Pacific New Wave
Benita's Frites 1433 Third St. Promenade Santa Monica 310-458-2889 Fast Food
Indo Cafe 10428 1/2 National Blvd. LA 310-815-1290 Indonesian
Diaghilev 1020 N. San Vicente Blvd. W. Hollywood 310-854-1111 Russian
Jody Maroni's Sausage Kingdom 2011 Ocean Front Walk Venice 310-306-1995 Hot Dogs
我尝试过此正则表达式,但不起作用:
zagat['city'] = zagat['raw'].str.extract("""
((?<=Ave.|Rd.|St.|Blvd.|Dr.|Way.|Pl.|Ln.|Ct.|Beach|Way ).+(?=...-...-....))
""", expand=True)
你能帮忙吗?
答案 0 :(得分:0)
您可以使用
rx = r'(?:(?:Ave|Rd|St|Blvd|Dr|Way|Pl|Ln|Ct)\.|Beach|Way|Walk)\s*(.+?)\s*\d{3}-\d{3}-\d{4}'
zagat['city'] = zagat['raw'].str.extract(rx, expand=False)
请参见regex demo
详细信息
(?:(?:Ave|Rd|St|Blvd|Dr|Way|Pl|Ln|Ct)\.|Beach|Way|Walk)
-Ave
,Rd
,St
,Blvd
,Dr
,Way
,Pl
,Ln
或Ct
,后跟.
或Beach
,Way
或Walk
\s*
-超过0个空格(.+?)
-第1组(此值将由.extract
返回):除换行符以外的任何一个或多个字符,应尽可能少\s*
-超过0个空格\d{3}-\d{3}-\d{4}
-3位数字,-
,3位数字,-
和4位数字。