Как заменить точные совпадения из списка строк специальными символами python? - PullRequest
1 голос
/ 25 октября 2019

Я удаляю все точные совпадения в списке list_of_strings из столбца данных pandas. Однако я не очень понимаю, что такое re.escape. Я хочу убедиться, что этот код удалит ВСЕ совпадения независимо от того, какой тип символа присутствует в моей переменной list_of_strings и в моем столбце dataframe. Что на самом деле делает re.escape? Я прочитал документацию, но я новичок в регулярных выражениях и был бы признателен за более понятное объяснение терминов.

import pandas as pd
import re

df = pd.DataFrame(
    {
        "ID": [1, 2],
        "name": [
            "I have a %$$#form with @#$%$#%@/}\p special characters!!!!",
            "can we: remove the EXACT matches !#$#%$^%$&^(*&*)(*&)_&#",
        ],

    }
)


list_of_strings = ['can we: remove', 'with @#$%$#%@/}\p special characters!!!!','EXACT']


p = re.compile('|'.join(map(re.escape, list_of_strings)))
df['cleaned_text'] = [p.sub(' ', text) for text in df['name']] 


Ответы [ 2 ]

1 голос
/ 26 октября 2019

Использование для цикла:

for i in list_of_strings:
    df['name'] = df['name'].str.replace(i, '', regex=False)

print(df)

   ID                                   name
0   1                     I have a %$$#form 
1   2   the  matches !#$#%$^%$&^(*&*)(*&)_&#

Может быть, есть более простой способ:

df.name.str.replace(list_of_strings[0],'', regex=False)\
       .str.replace(list_of_strings[1],'', regex=False)\
       .str.replace(list_of_strings[2],'', regex=False)

Вывод:

0                       I have a %$$#form 
1     the  matches !#$#%$^%$&^(*&*)(*&)_&#
Name: name, dtype: object
1 голос
/ 25 октября 2019

В регулярном выражении некоторый символ имеет значение и вызывает некоторую функциональность, когда вы хотите явно сопоставить символ без запуска его функции, вы избегаете его.

Теперь re.escape - это просто метод, позволяющий избежать экранированиясписок символов вручную.

вместо экранирования (добавление \) вручную, например, так:

"\ $ \ [\] \ ^"

Вы можете просто делать то, что пишите.

pattern = "|" .join (map (re.escape, "[$ [] ^")) "\ $ | \ [| \] | \ ^"

Чтобы узнать, для чего нужен ваш код, просто напечатайте стр.

list_of_strings = ['can we: remove', 'with @#$%$#%@/}\p special characters!!!!','EXACT']


p = '|'.join(map(re.escape, list_of_strings))
print(p)

Как вы увидите, все символы были экранированы \.

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