python - 如何将条件添加到正则表达式中?
问题描述
我一直在到处搜索,但还没有找到任何解决方案……例如,我的数据框中有一个名称列表,例如: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 YYY
name_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 Marketer
3 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 []
解决方案
关键是决定什么决定一个值是一个名字,什么不是。
从您的示例中,似乎'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.
推荐阅读
- apache-spark - 从 hive 查询数据时 Spark 抛出 AnalysisException (org.apache.hadoop.hive.ql.metadata.HiveException: Invalid partition for table XXX)
- python - Pandas 按列分组并将其他列转换为键:值对
- android - 有两张桌子的房间实体?
- mips - MIPS-I 固件 Qemu 仿真
- javascript - 我的验证表单 js 第一次显示为空,第二次显示为空
- dom - 页面加载时 DOM 元素未显示在 GTM 变量中
- typescript - 接受两个具有相同键的对象的打字稿函数
- swiftui - SwiftUI 某些图像在另存为 pngdata 后旋转 180 度
- ssis - 错误代码:0x80004005。错误代码 0xC020907B.错误代码 0xC0209029。错误代码 0xC02020C4。SSIS
- javascript - 如何格式化 ReactJs 日期选择器以使其看起来正常?