Как переместить положение слова в предложении в pyspark - PullRequest
0 голосов
/ 29 июня 2018

У меня есть следующие адреса улиц:

- 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

Большое спасибо, и я надеюсь, что кто-нибудь сможет мне помочь.

1 Ответ

0 голосов
/ 29 июня 2018

Вы можете попробовать это:

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

Logic

Используя логику захвата соответствия в круглых скобках, вы можете захватить все совпадения слов (включая числа и слова), разделенных пробелами, для совпадения SUR нам нужно, чтобы пятое слово было сопоставлено и вставлено в третью позицию. , Итак, мы фиксируем это в \ 6 (один больше 5, потому что мы также совпадаем с одним пробелом). После этого матча выберите все остальное в одиночном матче, используя (. *). Мы используем здесь sub от повторного модуля. Для последних двух строк, поскольку шаблон никогда не проходит, следовательно, ничего не заменяется, и строка останется такой, как есть.

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']
...