如果正则表达式不匹配,则保留pandas.series.str.extract()之后的原始字符串值

ztmd8pv5  于 2023-06-04  发布在  其他
关注(0)|答案(2)|浏览(201)

我试图从字符串中提取电子邮件,并希望确保如果原始值的格式已经达到我的预期,它不会更改为Nan,而是保持原样。
示例输入

<class 'pandas.core.series.Series'>
1    <doe.b.john@gmail.com>
2    <doe.c.jane@gmail.com>
3    person.anonymous@hotmail.com
4    dent.arthur@space.com

我在用

# curr_emails is <class 'pandas.core.series.Series'>
curr_emails = curr_emails.str.extract(r"<([^<>]+)>").squeeze()` # regex extracts text between < >

我收到回复
但我更希望
一个类似的问题是张贴here,但我似乎不能使它与我目前的方法工作。

1mrurvl1

1mrurvl11#

如果没有<>模式,则可以使用原始值填充它们。或者,如果<>位于电子邮件的开头和结尾,则可以将其剥离

curr_emails = (curr_emails.str.extract(r"<([^<>]+)>").squeeze()
               .fillna(curr_emails))
# or
curr_emails = curr_emails.str.strip(r'<>')
pvabu6sv

pvabu6sv2#

尝试使用str.replace而不是str.extract,将字符串开头的<或字符串结尾的>替换为''

curr_emails.str.replace('^<|>$', '', regex=True)

0            doe.b.john@gmail.com
1            doe.c.jane@gmail.com
2    person.anonymous@hotmail.com
3           dent.arthur@space.com

相关问题