如何删除并仅保留某些非字母数字字符?

时间:2019-01-28 16:21:03

标签: python-3.x pandas replace non-alphanumeric

我有一个如下所示的df:

email                                    id
{'email': ['test@test.com']}           {'id': ['123abc_d456_789_fgh']}

当我这样丢弃非字母数字字符时:

df.email = df.email.str.replace('[^a-zA-Z]', '')
df.email = df.email.str.replace('email', '')


df.id = df.id.str.replace('[^a-zA-Z]', '')
df.id = df.id.str.replace('id', '')

列如下:

email                    id
testtestcom              123abcd456789fgh

如何告诉代码不要将任何内容放在方括号中,而是将所有非字母数字字符都放在方括号之外?

新df应该这样:

email                        id
test@test.com                123abc_d456_789_fgh

2 个答案:

答案 0 :(得分:2)

这是硬编码的,但是可以使用:

df.email = df.email.str.replace(".+\['|'].+", '')
df.id = df.id.str.replace(".+\['|'].+", '')

>>> 'test@test.com'
>>> '123abc_d456_789_fgh'

答案 1 :(得分:1)

根据评论,您可能要做的是捕获捕获组中方括号之间的内容。

在替换中,使用第一个捕获组。

METHOD

这将匹配

  • \{'[^']+':\s*\['([^][]+)'\]} 匹配\{
  • {匹配'[^']+',然后不匹配' 1次以上
  • '字面上匹配
  • :匹配0+次空白字符,然后匹配\s*\['
  • [捕获组,不匹配([^][]+)[
  • ]匹配'\]
  • ]字面上匹配

Regex demo | Python demo