使用正则表达式分割字符串并包含模式

时间:2018-12-15 17:14:27

标签: python regex

我需要在学位上分割一个字符串(MSC,BSc等),并在第0列中保留标题名称,在第1列中保留地址。请在末尾{{ 1}}匹配标题

请在下面找到一些示例数据:

BS

我要完成以下操作:

Phillipp Shuster MSc Grolmanstraße 6 28195 Bremen Bahnhofsvorstadt DE
Eric Jager BSc Mohrenstrasse 29 72362 Nusplingen DE
Nykee Peters BS Taylor Street, Duncan Town BS

我尝试过此操作,但这会将标题添加到地址中(不正确)。

Phillipp Shuster MSc    |   Grolmanstraße 6 28195 Bremen Bahnhofsvorstadt DE
Eric Jager BSc          |   Mohrenstrasse 29 72362 Nusplingen DE
Nykee Peters BS         |   Taylor Street, Duncan Town BS

4 个答案:

答案 0 :(得分:1)

您可以使用此伴侣

(?<=\bmsc)|(?<=\bbsc)|(?<=\bbs)\s
  • (?<=\bmsc)-匹配msc
  • (?<=\bbsc)-匹配bsc
  • (?<=\bbs)-匹配bs
  • \s-匹配空格。

Demo

答案 1 :(得分:1)

我建议您采用 re.subn 方法,而不是拆分:

import re

data = '''Phillipp Shuster MSc Grolmanstraße 6 28195 Bremen Bahnhofsvorstadt DE
Eric Jager BSc Mohrenstrasse 29 72362 Nusplingen DE
Nykee Peters BS Taylor Street, Duncan Town BS'''

pattern = re.compile(r'^.+? (msc|bsc|bs)', flags=re.I)

for line in data.split('\n'):
    result = pattern.subn(lambda m: '{:<20s} | '.format(m.group()), line, count=1)
    print(result[0])

输出:

Phillipp Shuster MSc |  Grolmanstraße 6 28195 Bremen Bahnhofsvorstadt DE
Eric Jager BSc       |  Mohrenstrasse 29 72362 Nusplingen DE
Nykee Peters BS      |  Taylor Street, Duncan Town BS

答案 2 :(得分:1)

您可以将这个简单的正则表达式与split中的两个捕获组一起使用,而不是findall

reg = r'(?i)^(.*\s[BM]Sc?)\s+(.+)$'

RegEx Demo

RegEx说明:

  • (?i):忽略案例模式
  • ^:开始
  • (.*\s[BM]Sc?):匹配0+个字符,直到捕获组1中的BScBSMSMsc
  • \s+:匹配1个以上的空格
  • (.+):匹配1个以上的字符,直到在第二个捕获组中结束
  • $:结束

答案 3 :(得分:0)

我的 2c 使用re.sub

import re
x = """Phillipp Shuster MSc Grolmanstraße 6 28195 Bremen Bahnhofsvorstadt DE
Eric Jager BSc Mohrenstrasse 29 72362 Nusplingen DE
Nykee Peters BS Taylor Street, Duncan Town BS"""

for y in x.split("\n"):
    print(re.sub("^(.*?(?:MS|BS)c?)(.*)", r"\1 |\2", y, 0, re.DOTALL))

输出:

Phillipp Shuster MSc | Grolmanstraße 6 28195 Bremen Bahnhofsvorstadt DE
Eric Jager BSc | Mohrenstrasse 29 72362 Nusplingen DE
Nykee Peters BS | Taylor Street, Duncan Town BS

Python Demo
Regex Demo