想找到这个特殊案例的正则表达式吗?我也可以在不创建组的情况下解析它吗?

2024-09-30 01:20:03 发布

您现在位置:Python中文网/ 问答频道 /正文

要捕获的文本如下所示。。你知道吗

  Policy Number    ABCD000012345    other text follows in same line....

我的正则表达式看起来像这样

 regex value='(?i)(?:[P|p]olicy\s[N|n]o[|:|;|,][\n\r\s\t]*[\na-z\sA-Z:,;\r\d\t]*[S|s]e\s*[H|h]abla\s*[^\n]*[\n\s\r\t]*|(?i)[P|p]olicy[\s\n\t\r]*[N|n]umber[\s\n\r\t]*)(?P<policy_number>[^\n]*)'

这个特殊情况与第二个或第三个情况相匹配。。不过,它也捕获了保单编号之后的所有内容。什么样的停车条件才能让它抓到号码。我知道有点不对劲,但找不到出路。你知道吗

 (?i)[P|p]olicy[\s\n\t\r]*[N|n]umber[\s\n\r\t]*)

电流输出

    ABCD000012345othertextfollowsinsameline....

预期产量

   ABCD000012345

Tags: textin文本numbervaluepolicyline情况
2条回答

您不需要指定大小写pn,因为您已经指定了不区分大小写的。你知道吗

而且\s已经涵盖了\n\t\r。你知道吗

(?i)policy\s+number\s+([A-Z]{4}\d+)\b

验证目的:Regex

另一种解决方案:

^[\s\w]+\b([A-Z]{4}\d+)\b

出于验证目的:Regex

我更喜欢这个,以防你的短信和保险单号码不同

您可以使用更简单的正则表达式,只需从"[P|p]olicy\s*[N|n]umber\s*\b([A-Z]{4}\d+)\b.*"开始查找,然后使用单词boundary \b

pattern = re.compile(r"[P|p]olicy\s*[N|n]umber\s*\b([A-Z0-9]+)\b.*")
line = "Policy Number    ABCD000012345    other text follows in same line...."
matches = pattern.match(line)
id_res = matches.group(1)
print(id_res)  # ABCD000012345

如果在你使用(?:\w+\s+){2}\b([A-Z0-9]+)\b.*之前总是有两个单词


而且\s代表[\r\n\t\f\v ],所以不需要重复它们,你的[\n\r\s\t]就是\s

相关问题 更多 >

    热门问题