【问题标题】:Split string between characters with Python regex使用 Python 正则表达式在字符之间拆分字符串
【发布时间】:2017-12-30 00:47:10
【问题描述】:

我正在尝试拆分字符串:

> s = Ladegårdsvej 8B7100 Vejle

使用正则表达式:

[street,zip,city] = ["Ladegårdsvej 8B", "7100", "Vejle"]

s 变化很大,唯一确定的部分是 zip 中总是有 4 位数字,后面有一个空格。因此,我的想法是在 4 位数字和一个空格上“从右侧匹配”以指示字符串应在字符串中的该点拆分。

目前我可以像这样获得streetcity

> print re.split(re.compile(r"[0-9]{4}\s"), s)
["Ladegårdsvej 8B", "Vejle"]

我将如何根据需要拆分s;特别是在streetzip的数字之间的字符串中间怎么办?

【问题讨论】:

  • 所有字符串是否都具有与该字符串相同的整体格式,因为您可以将其拆分为空格,因为这似乎是三个之间的分隔符
  • @Professor_Joykill:街道和邮编之间没有空格。
  • @Professor_Joykill 请注意,OP 希望将7100 而不是8B7100 放入zip
  • 参见ideone.com/dmyo6b,您可以匹配并捕获这些部分。

标签: python regex string split


【解决方案1】:

一旦你有了街道,获取 zip 是微不足道的:

zip = s[len(street):len(street)+4]

【讨论】:

    【解决方案2】:

    您可以使用re.split,但将四位数字设为捕获组:

    >>> s = "Ladegårdsvej 8B7100 Vejle"
    >>> re.split(r"(\d{4}) ", s)
    ['Ladegårdsvej 8B', '7100', 'Vejle']
    

    来自documentation(强调我的)

    通过出现的模式分割字符串。 如果在模式中使用了捕获括号,那么模式中所有组的文本也会作为结果列表的一部分返回。 如果 maxsplit 不为零,则最多发生 maxsplit 拆分,其余的字符串作为列表的最后一个元素返回。

    【讨论】:

      【解决方案3】:

      这里是您的问题的解决方案。

      # -*- coding: utf-8 -*-
      import re
      st="Ladegårdsvej 8B7100 Vejle"
      reg=r'([0-9]{4})'
      rep=re.split(reg,st)
      print rep
      

      RasmusP_963先生提供的其他测试用例的解决方案。

      # -*- coding: utf-8 -*-
      import re
      st="Birkevej 8371900 Roskilde"
      print re.split(r"([0-9]{4}) ",st)
      

      【讨论】:

      • 那行不通,因为可能有一个street 地址的门牌号很长,没有字母(例如Birkevej 8371900 Roskilde),所以我需要在之后包含空格以确保它与最后四个数字(zip)。
      猜你喜欢
      • 2021-03-06
      • 2013-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-23
      相关资源
      最近更新 更多