如何 Python 被一个字符分割却又保持那个字符?
How to Python split by a character yet maintain that character?
Google 地图结果通常这样显示:
'\n113 W 5th St\nEureka, MO, United States\n(636) 938-9310\n'
另一种变体:
'Clayton Village Shopping Center, 14856 Clayton Rd\nChesterfield, MO, United States\n(636) 227-2844'
还有一个:
'Wildwood, MO\nUnited States\n(636) 458-7707'
注意 \n
字符位置的变化。
我希望提取前 X 行作为地址,最后一行作为 phone 数字。诸如 (.*\n.*)\n(.*)
之类的正则表达式对于第一个示例就足够了,但对于其他两个则不够。我唯一可以依赖的是 phone 数字将采用 (ddd) ddd-dddd
.
的形式
我认为很难找到一个允许每一种可能的变化的正则表达式。是否可以使用 split()
,但保持我们拆分的字符?那么在这个例子中,通过"("
拆分,拆分出地址和phone号码,但是在phone号码中保留这个字符?我可以将 "("
连接回 split("(")[1]
,但是有没有更简洁的方法?
不要使用正则表达式。只需拆分 '\n'
上的字符串即可。最后一个索引是一个phone数字,其他索引是地址。
lines = inputString.split('\n')
phone = lines[-1] if lines[-1].match(REGEX_PHONE_US) else None
address = '\n'.join(lines[:-1]) if phone else inputString
Python 有很多很棒的内置工具,可以比正则表达式更……人性化的方式……处理字符串。
如果我没理解错的话,你想要"extract the first X lines as address"。假设您需要的所有地址都在美国,这个正则表达式代码应该适合您。无论如何,它适用于您提供的 3 个示例:
import re
x = 'Wildwood, MO\nUnited States\n(636) 458-7707'
print re.findall(r'.*\n+.*\States', x)
输出为:
['Wildwood, MO\nUnited States']
如果你想在以后不使用 \n
打印它,你可以这样做:
x = '\n113 W 5th St\nEureka, MO, United States\n(636) 938-9310\n'
y = re.findall(r'.*\n+.*\States', x)
y = y[0].rstrip()
当您打印 y
输出时:
113 W 5th St
Eureka, MO, United States
而且,如果您想单独提取 phone 号码,您可以这样做:
tel = '\n113 W 5th St\nEureka, MO, United States\n(636) 938-9310\n'
num = re.findall(r'.*\d+\-\d+', tel)
num = num[0].rstrip()
当您打印 num
输出时:
(636) 938-9310
Google 地图结果通常这样显示:
'\n113 W 5th St\nEureka, MO, United States\n(636) 938-9310\n'
另一种变体:
'Clayton Village Shopping Center, 14856 Clayton Rd\nChesterfield, MO, United States\n(636) 227-2844'
还有一个:
'Wildwood, MO\nUnited States\n(636) 458-7707'
注意 \n
字符位置的变化。
我希望提取前 X 行作为地址,最后一行作为 phone 数字。诸如 (.*\n.*)\n(.*)
之类的正则表达式对于第一个示例就足够了,但对于其他两个则不够。我唯一可以依赖的是 phone 数字将采用 (ddd) ddd-dddd
.
我认为很难找到一个允许每一种可能的变化的正则表达式。是否可以使用 split()
,但保持我们拆分的字符?那么在这个例子中,通过"("
拆分,拆分出地址和phone号码,但是在phone号码中保留这个字符?我可以将 "("
连接回 split("(")[1]
,但是有没有更简洁的方法?
不要使用正则表达式。只需拆分 '\n'
上的字符串即可。最后一个索引是一个phone数字,其他索引是地址。
lines = inputString.split('\n')
phone = lines[-1] if lines[-1].match(REGEX_PHONE_US) else None
address = '\n'.join(lines[:-1]) if phone else inputString
Python 有很多很棒的内置工具,可以比正则表达式更……人性化的方式……处理字符串。
如果我没理解错的话,你想要"extract the first X lines as address"。假设您需要的所有地址都在美国,这个正则表达式代码应该适合您。无论如何,它适用于您提供的 3 个示例:
import re
x = 'Wildwood, MO\nUnited States\n(636) 458-7707'
print re.findall(r'.*\n+.*\States', x)
输出为:
['Wildwood, MO\nUnited States']
如果你想在以后不使用 \n
打印它,你可以这样做:
x = '\n113 W 5th St\nEureka, MO, United States\n(636) 938-9310\n'
y = re.findall(r'.*\n+.*\States', x)
y = y[0].rstrip()
当您打印 y
输出时:
113 W 5th St
Eureka, MO, United States
而且,如果您想单独提取 phone 号码,您可以这样做:
tel = '\n113 W 5th St\nEureka, MO, United States\n(636) 938-9310\n'
num = re.findall(r'.*\d+\-\d+', tel)
num = num[0].rstrip()
当您打印 num
输出时:
(636) 938-9310