Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用正则表达式和include模式拆分字符串_Python_Regex - Fatal编程技术网

Python 使用正则表达式和include模式拆分字符串

Python 使用正则表达式和include模式拆分字符串,python,regex,Python,Regex,我需要在学位(MSC,BSc,…)上拆分一个字符串,并在第0列保留名称和标题,在第1列保留地址注意BS末尾的国家代码与标题匹配 (?<=\bmsc)|(?<=\bbsc)|(?<=\bbs)\s 请在下面找到一些示例数据: Phillipp Shuster MSc Grolmanstraße 6 28195 Bremen Bahnhofsvorstadt DE Eric Jager BSc Mohrenstrasse 29 72362 Nusplingen DE Nykee

我需要在学位(MSC,BSc,…)上拆分一个字符串,并在第0列保留名称和标题,在第1列保留地址注意
BS
末尾的国家代码与标题匹配

(?<=\bmsc)|(?<=\bbsc)|(?<=\bbs)\s
请在下面找到一些示例数据:

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
我试过了,但这会将标题添加到地址中(不正确


你可以使用这个伴侣

(?<=\bmsc)|(?<=\bbsc)|(?<=\bbs)\s

(?我建议
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])

您可以在
findall
中使用带有2个捕获组的简单正则表达式,而不是
split

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

正则表达式说明:

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
  • (?i)
    :忽略案例模式
  • ^
    :开始
  • (.*\s[BM]Sc?
    :匹配0个以上字符,直到捕获组1中的
    BSc
    BS
    MS
    Msc
  • \s+
    :匹配1+个空格
  • (.+)
    :匹配1个以上字符,直到在第二个捕获组中结束
  • $
    :结束
My 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



@代码狂热者:我尝试了一个lookbehind,但收到了一个错误lookbehind requires fixed width pattern“\s(?Tryre.split(r'(?I)(?:)可以通过在bs前面放置一个空格来处理lookbehind fixed length问题,就像这样:splited=re.split(\s(?=((?:msc | bsc | bs)[^$)”),参与者,flags=re.IGNORECASE)
@Red Cricket:你能解释一下为什么会这样吗?“空间把戏”在做什么?顺便说一句,应该是:
splitted=re.split(“\s(?@JohnDoe请看一看