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

#python #regex #pandas #string

#python #регулярное выражение #pandas #строка

Вопрос:

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

Моя цель — использовать только английские символы, такие как [a-zA-Z] , но я также хотел бы разрешить некоторые специальные символы, такие как апострофы [‘]. Как я могу объединить все это вместе в pandas, чтобы заменить все другие специальные символы, цифры и т.д. с пустыми строками '' ?

Я предполагаю, что это что-то вроде: df['column1'].replace(to_replace = r'[^a-zA-Z]', value = '', regex = True, inplace = True) но я новичок в регулярных выражениях и не уверен, как включить другие символы, такие как апострофы.

Пример, который я хотел бы очистить:

source = 'i believe that's a dog. isn't it?

desired_result = 'i believe that's a dog isn't it

Спасибо.

Комментарии:

1. Вы можете просто включить символы внутри [ ] вместе с a-zA-Z.

2. @rootkonda Мне не нужно указывать какие-либо специальные флаги для # of вхождений или чего-либо еще? Я просто хочу заменить все, что не является символами или апостроф. Так r'[a-zA-Z']' должно сработать? Или еще лучше r"[a-zA-Z']"

Ответ №1:

Вам следует попробовать следующее решение.

 import re
line = "i believe that's a dog. isn't it?"
line = re.sub(r"[^a-zA-Zs']", "", line)
print(line)
  

Результат:

 i believe that's a dog isn't it
  

С Pandas

 import pandas as pd

df = pd.DataFrame(["i believe that's a dog. isn't it?","'test' string"], columns=['P'])
print(df)

#Solution1:
#df['P'] = df['P'].str.replace(r"[^a-zA-Zs']", "")

#Solution2:
df['P'].replace(to_replace=r"[^a-zA-Zs']", value="", regex=True, inplace=True)
print(df)
  

Комментарии:

1. С pandas этого было бы достаточно, правильно? total_df['column'].replace(to_replace = r"[^a-zA-Zs']", value = "", regex = True, inplace = True)

2. Этот подход сохранит внешние одиночные апострофы, такие как 'cat' is here .

3. @Coldchain9 Если мой ответ полезен, пожалуйста, поставьте галочку слева от ответа.

Ответ №2:

Вы также можете использовать extractall для этого, таким образом, вы можете извлекать только слова и апострофы:

 a = df['source'].str.extractall(r'([ w'] )')
df['result'] = a.apply(''.join)
print(df)

                              source                           result
0  i believe that's a dog. isn't it?  i believe that's a dog isn't it
  

Комментарии:

1. обратите внимание, что w также соответствует числам