如何将Python分割为一个角色但仍保留该角色?

Pyd*_*man 5 python regex split newline python-2.7

通常会显示Google地图结果:

在此输入图像描述

'\n113 W 5th St\nEureka, MO, United States\n(636) 938-9310\n'
Run Code Online (Sandbox Code Playgroud)

另一种变化:

在此输入图像描述

'Clayton Village Shopping Center, 14856 Clayton Rd\nChesterfield, MO, United States\n(636) 227-2844'
Run Code Online (Sandbox Code Playgroud)

而另一个:

在此输入图像描述

'Wildwood, MO\nUnited States\n(636) 458-7707'
Run Code Online (Sandbox Code Playgroud)

请注意\n字符位置的变化.

我想要提取前X行作为地址,最后一行作为电话号码.像(.*\n.*)\n(.*)第一个例子那样的正则表达式就足够了,但是对于其他两个例子而言则不够.我唯一可以依赖的是电话号码将在表格中(ddd) ddd-dddd.

我认为一个允许每一种可能变化的正则表达式很难得到.是否可以使用split(),但保持我们分裂的角色?那么在这个例子中,拆分"(",分割出地址和电话号码,但是在电话号码中保留这个字符?我可以连接到"("后面split("(")[1],但是有一个更简洁的方式吗?

Art*_*are 7

不要使用正则表达式.只需将字符串拆分为'\n'.最后一个索引是电话号码,其他索引是地址.

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
Run Code Online (Sandbox Code Playgroud)

Python有很多很棒的内置工具,用于以更人性化的方式操作字符串......而不是正则表达式允许的.

  • 另外,_check_最后一个元素是电话号码,如果该位置没有注册电话号码:`phone = lines [-1]如果行[-1].匹配(REGEX_PHONE_US)否则无`其中`REGEX_PHONE_US `是其他地方定义的编译模式. (3认同)
  • 正则表达式可用于验证最后一行实际上是电话号码. (2认同)