我正在寻找一种使用python正则表达式从文本中提取职位编号的方法

时间:2018-11-19 05:33:43

标签: python regex

如果文本为“作业45,作业32,然后是作业15”,我希望得到以下结果: ['job 45','job 32','job 15']或['45','32','15']

我尝试了r'[job] \ d +',该返回空列表。

re.findall(r'[job]\d+', 'Job 45, job 32 and then job 15'.lower())
[]

我尝试过分工。

re.split(r'job','Job 45, job 32 and then job 15'.lower())
['', ' 45, ', ' 32 and then ', ' 15']

我尝试过分词。

re.findall(r'\w+','Job 45, job 32 and then job 15'.lower())
['job', '45', 'job', '32', 'and', 'then', 'job', '15']

这是可行的..我可以检查元素是否为'job'以及以下元素是否可以转换为数字。

从“作业45,作业32和作业”中获取['job 45','job 32','job 15']或['45','32','15']的正则表达式是什么然后工作15'?

3 个答案:

答案 0 :(得分:3)

您的正则表达式[job]\d+有几个问题,

[job]是一个字符集,这意味着它将仅匹配j或o或b的一个字符。

第二个问题,正则表达式中的作业和编号之间没有空格。

第三个问题,因为您的输入文本既包含Job又包含Job,因此要进行不区分大小写的匹配,您需要(?i)标志。

因此,您更正后的正则表达式就是这样,

(?i)job\s+\d+

Demo

示例python代码

import re
s = 'Job 45, job 32 and then job 15';
str = re.findall('(?i)job\s+\d+', s)
print(str)

这将提供以下输出,

['Job 45', 'job 32', 'job 15']

答案 1 :(得分:1)

或更简单地使用'job (\d+)'表达式:

>>> re.findall('job (\d+)',s.lower())
['45', '32', '15']
>>> 

答案 2 :(得分:0)

一种方法是使用以下模式,该模式在后面使用肯定的表情:

(?<=\bjob )\d+

这将捕获紧接在文本job之后的任何一组数字(不区分大小写),后跟一个空格。

text = "Job 45, job 32 and then job 15"
res = re.findall(r'(?<=\bjob )\d+', text, re.I)
print(res)

['45', '32', '15']