Как удалить и сохранить только определенные не буквенно-цифровые символы? - PullRequest
0 голосов
/ 28 января 2019

У меня есть 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 голосов
/ 28 января 2019

Это жестко, но работает:

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

>>> 'test@test.com'
>>> '123abc_d456_789_fgh'
0 голосов
/ 28 января 2019

Согласно комментариям, вы могли бы захватить то, что находится между квадратными скобками в группе захвата.

При замене используйте первую группу захвата.

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

Это будет соответствовать

  • \{ Матч {
  • '[^']+' Матч ', затем не ' 1+ раз
  • :Совпадение буквально
  • \s*\[' Совпадение 0+ раз с пробельным символом, а затем [
  • ([^][]+) Группа захвата, совпадение не [ или ]
  • '\] Совпадение ]
  • } Совпадение буквально

Regex demo | Python demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...