如何在pyspark中移动句子中的单词位置

How to move a word position in a sentence in pyspark

我有以下街道地址:

- 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,将其删除,然后在主地址后 setter。例如:

- 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

非常感谢,希望有人能帮助我。

你可以试试这个:

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]+)(.*)$')

逻辑:

利用括号内匹配的捕获逻辑,可以捕获所有以space分隔的单词(包括数字和单词)的匹配,对于SUR的匹配,我们需要第5个单词被匹配并插入到第三个位置。所以,我们在 \6 中捕获它(一个大于 5,因为我们也匹配一个 space)。在这场比赛之后,使用 (.*) 选择单场比赛中的所有其他内容。我们在这里使用来自 re 模块的 sub。对于最后两个字符串,由于模式永远不会通过,因此不会替换任何内容,字符串将保持原样。

newlyst = []
for items in lyst:
    newlyst.append(re.sub(comp, r'', 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']