Python 正则表达式组匹配显示多余的空字符串

Python regex group matches shows extra empty string

我想从我的文本中获取后跟 DATE FILLEDREFILL 的日期。 DATE FILLEDREFILL 的顺序不固定。日期模式可以是:

6/23/20
6-23-20

我的 Python 脚本是:

expiration_date_regex = re.compile(r"(USE\s+BY.*(?P<expiration>\d{1,2}/\d{1,2}/\d{2,4}))|(DATE\s+FILLED.*(?P<date_filled>\d{1,2}/\d{1,2}/\d{2,4}))", re.M)
find_matches(expiration_date_regex, text)

def find_matches(regex, text):
    matches = regex.findall(text)
    for match in matches:
        print(match)

我的文字是:

CVS pharmacy
713-217 HsonSt
OTY: 90
REFILL 0 Refills
PRSCBN. A Beil
DATE FILLED 6/23/20
USE BY. 6/23/21
RPH Bill Liu
MFR AUROBINDO PHARM
ST DEA BC2236645
This is a WHITE
REDTME

但我得到的输出是这样的,输出几乎是合理的,但我不明白第一个元组中前两个空字符串的含义是什么?第二个元组的最后两个字符串也是如此。它看起来像位掩码:

('', '', 'DATE FILLED 6/23/20', '6/23/20')
('USE BY. 6/23/21', '6/23/21', '', '')

正在将我的评论转换为答案,以便未来的访问者可以轻松找到解决方案。

您可以使用这个正则表达式:

(?i)(USE\s+BY|DATE\s+FILL(?:ED)?).*(?P<date>\d{1,2}[-/]\d{1,2}[-/]\d{2,4})

RegEx Demo

正则表达式详细信息:

  • (?i): 启用忽略大小写模式
  • (USE\s+BY|DATE\s+FILL(?:ED)?):匹配USE BYDATE FILLEDDATE FILL
  • .*:匹配0个或多个任意字符
  • (?P<date>\d{1,2}[-/]\d{1,2}[-/]\d{2,4}):使用/-作为分隔符匹配日期字符串