【问题标题】:Detecting Special Characters with Regular Expression in python?在python中使用正则表达式检测特殊字符?
【发布时间】:2020-05-07 05:01:21
【问题描述】:

df

   Name
0  @#
1  R@#
2  ghj@#
3  Ray
4  *@+
5  Jack
6  Sara123#
7  ( 1234. )
8  Benjamin k 123
9  _
10 _!@#_
11 _#_&@+-
12 56#@!

输出:

 Bad_Name
0  @#
1  *@+
2  _
3  _!@#_
4  _#_&@+-

我需要通过正则表达式检测特殊字符。如果字符串包含任何字母或数字,则该字符串是有效的,否则它将被视为错误字符串。 我正在使用 '^\W*$' RE,一切正常,除非字符串包含 '_'(下划线)它不被视为错误字符串。

【问题讨论】:

  • 只需使用[A-Za-z0-9] 而不是\w 即可排除_-
  • 我这样做是为了用 Null 替换值。 df.replace({"[A-Za-z0-9]":np.nan}, regex= True) 但它不起作用
  • 而不是^\W*$ 使用^[\W_]+$ 表示非单词字符或下划线

标签: regex python-3.x pandas python-2.7


【解决方案1】:

使用pandas.Series.str.contains:

df[~df['Name'].str.contains('[a-z0-9]', False)]

输出:

       Name
0        @#
4       *@+
9         _
10    _!@#_
11  _#_&@+-

【讨论】:

  • 我这样做是为了用 Null 替换值。 df.replace({"[A-Za-z0-9]":np.nan}, regex= True) 但它不起作用
  • 您不能使用dictregex。试试df.replace("[A-Za-z0-9]", np.nan, regex=True)
  • 只要模式匹配,它将用 null 替换。我只需要将那些有纯特殊字符(不包含任何数字或字母)的值设为 null。
猜你喜欢
  • 1970-01-01
  • 2014-07-16
  • 2021-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-17
  • 2015-12-28
  • 1970-01-01
相关资源
最近更新 更多