Python-如何添加\和|到str.contains()

时间:2019-01-30 15:48:27

标签: python python-3.x string pandas

我正在清理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 :(得分:3)

尝试在字符串前面添加r,以便Python将您的字符串解释为原始字符串:

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

答案 1 :(得分:2)

您可以避免通过re.escape手动指定|条件:

import re

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

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

the docs中特别提到了该用例,该建议还建议:从Python 3.7开始,仅转义在正则表达式中具有特殊含义的字符。