代码之家  ›  专栏  ›  技术社区  ›  Keith John Hutchison

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

  •  2
  • Keith John Hutchison  · 技术社区  · 6 年前

    作业45、作业32、作业15或作业45、作业32、作业15

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

    3 回复  |  直到 6 年前
        1
  •  3
  •   Pushpesh Kumar Rajwanshi    6 年前

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

    [job]

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

    第三个问题,因为输入文本包含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']
    
        2
  •  1
  •   U13-Forward    6 年前

    或者更容易使用 'job (\d+)'

    >>> re.findall('job (\d+)',s.lower())
    ['45', '32', '15']
    >>> 
    
        3
  •  0
  •   Tim Biegeleisen    6 年前

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

    (?<=\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']