为了账号安全,请及时绑定邮箱和手机立即绑定

如何将条件添加到正则表达式中?

如何将条件添加到正则表达式中?

慕慕森 2022-07-26 10:43:30
我一直在到处搜索,但还没有找到任何解决方案……例如,我的数据框中有一个名称列表,例如:Penelope Deans、Corinne M. Percell、Sally Seaborn、Tereasa T. Aranda 和很快。我目前的正则表达式是^[A-Z][a-z]+,?\s+(?:[A-Z][a-z]*\.?\s*)?[A-Z][a-z]+抓住了大部分的名字。但是,在数据框中,我也有类似“XXX 的许可房地产,YYY 的数字营销人员”之类的行。并且上面的 Regex 还抓住了“有执照的房地产”和“数字营销商”。我只想选择只有名称的行,我该怎么做?我可以以某种方式编写正则表达式以不捕捉任何包含“at”一词的单词吗?+++所以我正在处理只有一列和多行的数据框,数据框如下所示:lst = [Penelope Deans, 1/1/2020, Digital Marketer at XXX, Corinne M. Percell, 1/1/2020, Tereasa T., Licensed Real Estate at YYY]df = pd.DataFrame(lst)df    Info 0  Penelope Deans 1  1/1/2020 2  Digital Marketer at XXX 3  Corinne M. Percell 4  1/1/2020 5  Tereasa T. 6  Licensed Real Estate at YYYname_pat = r"^[A-Z][a-z]+,?\s+(?:[A-Z][a-z]*\.?\s*)?[A-Z][a-z]+"df['Info'].str.findall(name_pat)输出是    Info 0  Penelope Deans 1  []2  Digital Marketer3  Corinne M. Percell 4  [] 5  Tereasa T. 6  Licensed Real Estate我期待:    Info 0  Penelope Deans 1  []2  []3  Corinne M. Percell 4  []5  Tereasa T. 6  []
查看完整描述

1 回答

?
慕妹3146593

TA贡献1820条经验 获得超9个赞

关键是决定什么决定一个值是一个名字,什么不是。


从您的示例中,似乎'Penelope Deans','Corinne M. Percell'和'Tereasa T.'是名称,而'1/1/2020'不是(因为它有数字和斜杠),'Digital Marketer at XXX'也不是,因为它遵循模式<namelike> at <namelike>。


请注意,根据这些规则'John at Smith'也不会是名称。但是由于“at”在英语中不是一个普通的贵族助词,它应该可以工作,而且您并不希望专门涵盖外国名称(即使那样,名称中的“at”也很少见)。


使用正则表达式的 Python 解决方案:


import pandas as pd


lst = [

    'Penelope Deans', '1/1/2020', 'Digital Marketer at XXX', 'Corinne M. Percell', 

    '1/1/2020', 'Tereasa T.', 'Licensed Real Estate at YYY'

]


df = pd.DataFrame(lst)


df = df[df[0].str.match('^((?! at )[A-z\s\.])+$')]


print(df)

结果:


                    0

0      Penelope Deans

3  Corinne M. Percell

5          Tereasa T.


查看完整回答
反对 回复 2022-07-26
  • 1 回答
  • 0 关注
  • 55 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信