我需要提取满足多种场景的车辆类的值,因此尝试在范围类和日期之间进行提取,但是对于很少的样本数据,需要忽略不必要的值(如holder和tolder )。我也试过,但不能排除这些词。
尝试过Regex:
样本数据1:车辆类别LMV MCWG发布日期
样本数据2:车辆类别MCWG发布日期
样本数据3:车辆类别LMV MCWG发布日期
样本数据4:车辆类别LMV MCWOG TOLDER签发日期
样本数据5:车辆类别MCWG LMV LMV-GV PSVBUS发布日期
样本资料6:车辆类别LMY MCWG持有人签发日期
预期输出:类和日期之间的值(例如:在样本数据1: LMV MCWG中,在样本数据6: LMY MCWG中,它应该忽略HOLDER签名)
发布于 2022-05-10 09:20:55
您可以使用模式(MC[A-Z]+).*(LM[A-Z]+)|(LM[A-Z]+).*(MC[A-Z]+)
发布于 2022-05-10 09:41:24
您可以使用字符类匹配HOLDER或TOLDER。您可以在捕获组中捕获您想要的数据,而不是查找。
在字符类中,您使用的是\s,它也匹配一个空格,如果要匹配管道字符,可以使用单个| (注意,它在字符类中并不意味着OR )。
若要防止部分单词匹配,可以添加单词边界\b。
\bClass\s([a-zA-Z(|)\s-]*?)\s*(?:Date|[HT]OLDER)\b看一个regex演示。
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']https://stackoverflow.com/questions/72182627
复制相似问题