我需要在学位上分割一个字符串(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
答案 0 :(得分:1)
您可以使用此伴侣
(?<=\bmsc)|(?<=\bbsc)|(?<=\bbs)\s
(?<=\bmsc)
-匹配msc
。(?<=\bbsc)
-匹配bsc
。(?<=\bbs)
-匹配bs
。\s
-匹配空格。答案 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说明:
(?i)
:忽略案例模式^
:开始(.*\s[BM]Sc?)
:匹配0+个字符,直到捕获组1中的BSc
或BS
或MS
或Msc
\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