Удалить данную строку как из начала, так и из конца слова - PullRequest
0 голосов
/ 12 июня 2019

Данные:

col 1
AL GHAITHA
AL ASEEL
EMARAT AL
LOREAL
ISLAND CORAL

Мой код:

def remove_words(df, col, letters):
    regular_expression = '^' + '|'.join(letters)
    df[col] = df[col].apply(lambda x:   re.sub(regular_expression, "", x))

Желаемый вывод:

col 1
GHAITHA
ASEEL
EMARAT
LOREAL
ISLAND CORAL
SUNRISE

Вызов функции:

letters = ['AL','SUPERMARKET']
remove_words(df=df col='col 1',letters=remove_letters)

По сути, я хотел удалить буквы, указанные в начале или в конце. (примечание: это должна быть отдельная строка) Туман, например: «EMARAT AL» должен стать «EMARAT» Примечание «LOREAL» не должно становиться «LORE»

Код для построения df:

raw_data = {'col1': ['AL GHAITHA', 'AL ASEEL', 'EMARAT AL', 'LOREAL UAE',
                     'ISLAND CORAL','SUNRISE SUPERMARKET']
}

df = pd.DataFrame(raw_data)

1 Ответ

0 голосов
/ 12 июня 2019

Вы можете использовать

pattern = r'^{0}\b|\b{0}$'.format("|".join(map(re.escape, letters)))
df['col 1'] = df['col 1'].str.replace(pattern, r'\1').str.strip()

Шаблон (?s)^{0}\b|(.*)\b{0}$'.format("|".join(map(re.escape, letters)) создаст шаблон, подобный (?s)^word\b|(.*)\bword$, и будет соответствовать word как целому слову в начале и конце строки.

При проверке слова в конце строки весь текст до того, как он будет записан в Группу 1, следовательно, шаблон замены содержит заполнитель \1 для восстановления этого текста в результирующей строке.

Если ваш список letters содержит элементы, состоящие только из символов слова, вы можете пропустить map с re.escape, замените map(re.escape, letters) на letters.

.str.strip() удалит всерезультирующие пробелы в начале / конце.

См. демонстрационную версию regex .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...