我有以下街道地址:
- KR 71D 6 94 SUR LC 1709
- KR 24B 15 20 SUR AP 301
- KR 72F 39 42 SUR
- KR 72F SUR 39 42
- KR 72 SUR 39 42
我需要的是仅在地址铭牌之后检测SUR字样,将其删除,然后在主地址后设置。例如:
- KR 71D 6 94 SUR LC 1709 <-- Change it to: KR 71D SUR 6 94 LC 1709
- KR 24B 15 20 SUR AP 301 <-- Change it to: KR 24B SUR 15 20 AP 301
- KR 72F 39 42 SUR <-- Change it to: KR 72F SUR 39 42
- KR 72F SUR 39 42 <-- It is ok, leave it this way
- KR 72 SUR 39 42 <-- It is ok, leave it this way
非常感谢,我希望有人能帮助我。
答案 0 :(得分:1)
您可以尝试以下方法:
import re
lyst = ["KR 71D 6 94 SUR LC 1709","KR 24B 15 20 SUR AP 301","KR 72F 39 42 SUR","KR 72F SUR 39 42","KR 72 SUR 39 42"]
comp = re.compile(r'([a-zA-Z]+)(\s)(\w+)\s(\d+)\s(\d+)\s([a-zA-Z]+)(.*)$')
逻辑:
使用在括号中捕获匹配项的逻辑,可以捕获所有由空格分隔的单词(包括数字和单词)的匹配项,对于SUR的匹配,我们需要将第五个单词进行匹配并插入到第三位置。因此,我们用\ 6捕获了该值(一个大于5,因为我们也匹配一个空格)。这场比赛之后,使用(。*)选择一次比赛中的所有其他比赛。我们在这里使用sub
的re模块。对于最后两个字符串,由于模式永远不会通过,因此不会替换任何内容,并且字符串将保持原样。
newlyst = []
for items in lyst:
newlyst.append(re.sub(comp, r'\1\2\3\2\6\2\4\2\5\7', items))
您可以打印newlyst
来查看输出:
输出:
['KR 71D SUR 6 94 LC 1709', 'KR 24B SUR 15 20 AP 301', 'KR 72F SUR 39 42', 'KR 72F SUR 39 42', 'KR 72 SUR 39 42']