Python - Как вы добавляете \ и |к str.contains () - PullRequest
0 голосов
/ 30 января 2019

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

d = {'username': ["11111", "222!22", "21212!", "85511$", "8552$", "115522@@"]}
df = pd.DataFrame(data=d)

    username
0   11111
1   222!22
2   21212!
3   85511$
4   8552$
5   115522@@
....

Я использую следующее, и оно работает как ожидалось:

df[~df['username'].str.contains('~|`|!|@|#|\$|%|\^|&|\*|\(|\)|-|_|\+|=|{|\[|}|]|:|;|"|\'|<|,|>|\.|/|\?')]

Но я хотел бы добавить еще два символа:

\ и |

Когда я пытаюсь добавить их как \\ для \ и \| для |, но я получаю ошибки.Как мне поступить об этом?

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Вы можете избежать указания вручную условий | с помощью re.escape:

import re

chars = """~`!@#$%^&*()-_+={[}]:;"'<,>./?\|"""
regex_search = '|'.join(map(re.escape, chars))

res = df[~df['username'].str.contains(regex_search)]

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

0 голосов
/ 30 января 2019

Попробуйте добавить r перед строкой, чтобы Python интерпретировал вашу строку как raw:

df[~df['username'].str.contains(r'~|`|!|@|#|\$|%|\^|&|\*|\(|\)|-|_|\+|=|{|\[|}|]|:|;|"|\'|<|,|>|\.|/|\?')]
...