我正试图从Indeed职位描述中汲取多年经验。几乎所有的描述都列出了这样的经历:“ 0-2年”或“ 2+年”或“ 2年”。无论如何列出,“年”一词都在所需的经验年数之后。
我如何在单词“ years”之前返回一定数量的字符(在这种情况下,最大为4个字符,包括空格)以捕获数字?
我计划提取数字(如果它是字符串形式),然后对它们求平均以返回一个要在机器学习模型中使用的值。我正在删除任何需要两位数经验值(例如10)的职位描述,因此这不会成为问题。
例如:
示例描述:“理想的候选人将具有0-2年的Apache Spark经验。”
所需的输出:
或者作为字符串的“ 0-2”,这样我就可以手动提取数字,甚至更好的是数字列表[0,2]
我认为此正则表达式可以满足您的需求:
import re
s = "Ideal candidate will have 0-2 years of experience with Apache Spark."
matches = re.findall("([^\s]+) years", s)
print(matches)
结果:
['0-2']
对于您的三种用例,这将起作用:
In [54]: l
Out[54]: ['0-2 years', '2+ years', '2 years']
In [53]: for s in l:
...: print(re.findall(r'(\d+)(?=[\-\d+|\syear])',s))
...:
['0', '2']
['2']
['2']
您必须将-
放在字符类[]
中,或使用\
对其进行转义。
[1]有一个积极的前瞻?=
,是一个连字符和一个数字,或者2)一个空格和单词“ year”。