Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
I';我正在寻找一种使用python正则表达式从文本中提取作业编号的方法_Python_Regex - Fatal编程技术网

I';我正在寻找一种使用python正则表达式从文本中提取作业编号的方法

I';我正在寻找一种使用python正则表达式从文本中提取作业编号的方法,python,regex,Python,Regex,如果文本是“作业45,作业32,然后是作业15”,我想得到一个结果 作业45、作业32、作业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

如果文本是“作业45,作业32,然后是作业15”,我想得到一个结果 作业45、作业32、作业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”,以及以下元素是否可以转换为数字


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

一种方法是使用以下模式,该模式使用正向后视:

(?<=\bjob )\d+

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

[job]
是一个字符集,意味着它将只匹配一个字符j、o或b

第二个问题,在正则表达式中没有在job和number之间提供空格

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

所以你的正则表达式的正确形式变成了

(?i)job\s+\d+

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']

或者使用
作业(\d+)
表达式更容易:

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

[job]
是与单个字符匹配的正则表达式,即
j
o
b
中的任意一个字符。匹配
job
的正则表达式是
job
。这不太可能发生,但您可能希望在
job
@TimBiegeleisen的左侧放置一个单词边界
\b
:虽然您是对的,但除非OP的文本中有类似“job 24,hotjob 52,job 25“他不打算匹配'hotjob',额外的\b只会使正则表达式稍微大2个字符:)谁知道他可能也打算匹配'hotjob 52':)我喜欢完全有效答案的匿名否决票。我也觉得奇怪。我在我编写的代码中使用了您的示例。
>>> re.findall('job (\d+)',s.lower())
['45', '32', '15']
>>>