繁体   English   中英

REGEX - 范围之间的提取并忽略某些单词(python)

[英]REGEX - Extraction between range and also ignore certain word (python)

我需要提取满足多种场景的车辆类的值,因此尝试在范围类和日期之间提取,但对于少数样本数据,不需要的值(如持有者和出纳员)需要被忽略。 我也尝试过使用 or 条件,但无法排除这些词

尝试过正则表达式:

  1. (?<=Class\s)[az AZ(-|\s|\)]*(?=Date|TOLDER)
  2. (?<=Class\s)[az AZ(-|\s|\)]*(?=Date)

样本数据 1:车辆等级 LMV MCWG 发布日期

样本数据 2:车辆类别 MCWG 发布日期

样本数据 3:车辆等级 LMV MCWG 发布日期

样本数据 4:车辆等级 LMV MCWOG TOLDER SIGNATURE 签发日期

样本数据 5:车辆类别 MCWG LMV LMV-GV PSVBUS 发布日期

样本数据 6:车辆等级 LMY MCWG HOLDER SIGNATURE 签发日期

预期输出:类别和日期之间的值(例如:在样本数据 1 中:LMV MCWG,在样本数据 6 中:LMY MCWG,它应该忽略 HOLDER SIGNATURE)

您可以使用模式(MC[AZ]+).*(LM[AZ]+)|(LM[AZ]+).*(MC[AZ]+)
https://regex101.com/r/08lN88/1

您可以使用字符类匹配 HOLDER 或 TOLDER。 您可以在捕获组中捕获所需的数据,而不是环顾四周。

在字符类中,您使用\s也匹配空格,如果要匹配管道字符,可以使用单个| (请注意,这并不意味着在字符类中为 OR)

为防止部分单词匹配,您可以添加单词边界\b

\bClass\s([a-zA-Z(|)\s-]*?)\s*(?:Date|[HT]OLDER)\b

查看正则表达式演示

import re

pattern = r"\bClass\s([a-zA-Z(|)\s-]*?)\s*(?:Date|[HT]OLDER)\b"

s = ("sample data 1 :\n"
            "Vehicle Class\n"
            "LMV\n"
            "MCWG\n"
            "Date of Issue\n\n"
            "sample data 2 :\n"
            "Vehicle Class MCWG\n"
            "Date of issue\n\n\n"
            "sample data 3 : \n"
            "Vehicle Class LMV MCWG\n"
            "Date of issue\n\n"
            "sample data 4 :\n"
            "Vehicle Class LMV MCWOG\n"
            "TOLDER SIGNATURE\n"
            "Date of Issue \n\n"
            "sample data 5 :\n"
            "Vehicle Class MCWG LMV LMV-GV PSVBUS\n"
            "Date of issue\n\n"
            "sample data 6 :\n"
            "Vehicle Class LMY MCWG\n"
            "HOLDER SIGNATURE\n"
            "Date of Issue ")

print(re.findall(pattern, s))

输出

['LMV\nMCWG', 'MCWG', 'LMV MCWG', 'LMV MCWOG', 'MCWG LMV LMV-GV PSVBUS', 'LMY MCWG']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM