【发布时间】:2021-11-16 08:24:18
【问题描述】:
我需要使用正则表达式和 python 从数据集中的字符串中过滤掉特定字符。
我有包含业务和员工信息的数据。我想保留员工人数,并跳过/排除任何包含“自雇人士”一词的单元格我可以使用什么正则表达式来删除除所述字符之外的所有内容。
示例: String: "Health, Wellness and Fitness, 501-1000 employees" Desired Outcome: 501-1000
或者: String: "Retail, 10,000+ employees" Desired Outcome: 10,000+"
或者,如果单元格包含“自雇”,则应跳过该词,将其保留并转到下一个单元格:String: Self-employed' Desired Outcome: Self-employed"
我想要一种模式,它可以消除除期望结果中所要求的之外的所有内容。 这是我使用的代码,但它似乎没有改变任何东西,我做错了什么?
if 'employee' in row.keys():
row['employee'] = re.sub("([0-9]+[,\-]*[0-9]*[+]?|Self-employed)", '', str(row['employee']))
【问题讨论】:
-
我把它放在一起只是摆弄你的用例
([0-9]+[,\-]*[0-9]*[+]?|Self-employed)。它适用于您提供的每种情况。如果这符合您的需求,我会提供答案。 -
您的模式以数字开头,后跟几个非空格:\d[^\s]*
-
@Porsche9II 这很聪明!
Self-employed的情况仍然需要处理,但这很容易。 -
我认为您错误地使用了
re.sub。您的替换字符串为空。您想用捕获组结果替换整个字符串。 -
我认为您想要的不是
re.sub,因为从技术上讲,您想要匹配的值并且您不想替换它们。你可能会做一个更复杂的正则表达式,或者只是使用类似row['employee'] = re.search("([0-9]+[,\-]*[0-9]*[+]?|Self-employed)", str(row['employee'])).group(1)
标签: python regex csv data-cleaning