匹配正则表达式模式(如果存在),否则

时间:2016-11-11 07:51:18

标签: regex

这是我想要实现的目标。给定一组数据,我试图获得包含我所拥有的匹配正则表达式的整行。

基本上,给定一个这样的数据集

AFAM 002A AFAM & DEV AM HIS/GV 03 46493 3 LEC D2 70 P 20/15 W 1800-2045 08/24/16-12/12/16 WSQ 207 K WHITE 
AFAM 102 AFRO-AMER MUSIC 01 47200 3 LEC P 5/30 W 1800-2045 08/24/16-12/12/16 MUS 250 V GROCE-ROBERTS 
AFAM 125 THE BLACK FAMILY 01 47198 3 LEC P 16/40 M 1800-2045 08/24/16-12/12/16 CCB 101 S MILLNER 
AFAM 152 THE BLACK WOMAN 01 47199 3 LEC P 8/40 T 1800-2045 08/24/16-12/12/16 CL 111 R WILSON 
AFAM 159 ECON ISSUES BLKCM 01 47197 3 LEC P 11/40 MW 1330-1445 08/24/16-12/12/16 CL 234 R WILSON 
AFAM 180 INDIVIDUAL STUDIES 01 46982 3 SUP P 0/10 TBA TBA 08/24/16-12/12/16 

我创建的正则表达式基本上将以下内容分组为..

  1. 课程编号,例如。 AFAM 002A
  2. 课程名称,例如。 AFRO-AMER MUSIC
  3. 开始日期
  4. 结束日期
  5. 教授姓名(这是我想要选择的价值)
  6. 我现在遇到的问题是,对于可选值,而不是检查它是否存在,如果不存在,则留空。如果有人能告诉我正确的方法,我会非常感激。

    基本上这部分正则表达式([A-Z][\s][A-Z]+[-]*[A-Z]+)?如果存在则需要包括在内,我理解?运算符应该如何工作,但我似乎无法找到这个问题的正确关键字所以我在这里

    ([A-Z]+[\s][0-9]+[A-Z]*)(.+)[\s][0-9]+[\s][0-9]+.+(\d\d\/\d\d\/\d\d)-(\d\d\/\d\d\/\d\d)[\s]([A-Z][\s][A-Z]+[-]*[A-Z]+)?
    

    此数据集的最后两行的预期结果应为

    { [ (AFAM 159), (ECON ISSUES BLKCM), (08/24/16), (12/12/16), (R WILSON)],
    [(AFAM 180), (INDIVIDUAL STUDIES), (08/24/16), (12/12/16), ()]
     }
    

1 个答案:

答案 0 :(得分:1)

您的正则表达式与最后一行中的from bs4 import BeautifulSoup import requests # Assuming this is the url where the file is html = requests.get('http://www.lancaster.ac.uk/fass/projects/corpus/emille/MANUAL.htm').content bsObj = BeautifulSoup(html) textData = bsObj.findAll('p') for item in textData: print item.get_text() 不匹配。你需要消耗它。但是,仅添加CL 234将不起作用,您需要使您的可选模式必须(删除.*?)并使用可选的非捕获组?包装.*?([A-Z]\s[A-Z]+-*[A-Z]+)

(?:....)

请参阅regex demo