2

我的 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
4

2 回答 2

2

这是硬编码的,但有效:

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

>>> 'test@test.com'
>>> '123abc_d456_789_fgh'
于 2019-01-28T17:16:41.693 回答
1

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

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

\{'[^']+':\s*\['([^][]+)'\]}

那将匹配

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

正则表达式演示| Python 演示

于 2019-01-28T16:27:38.843 回答