正则表达式统一模式要求

2024-03-28 13:46:10 发布

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

我一直试图用regex解析包裹号,但遇到了一些问题。我从这个开始:

r'(?<=[":#][\s\n])(\d{2}[-:\s]*\d{2}[-:\s]*\d{3}[-:\s]*\d{3}(?:\-{1}\d{4})?)'

通过查看后面以确保我没有意外返回10位或14位长度的电话号码或内部文件号码。结果发现,一个列表可能包含多个由任意数量的字符(空格、and、/、&;等)分隔的包裹号(最多40+)。所以我就把后面的部分剪掉,这样处理:

r'\d{2}[-:\s]*\d{2}[-:\s]*\d{3}[-:\s]*\d{3}(?:[-:\s]*\d{4}$)?'

但在一个例子中:

#22-33-155-003 NKA 22-33-155-009。。。。。。高/宽#41877 1021690 UPAXLP

结果是:

['22-33-155-009', '22-33-155-003', '1877 102169']

我试过在开头加上^,在结尾加上$,以防止最后一位(41877 1021690 UPAXLP)返回“1877 102169”,但是它什么也不返回。你知道吗

每个清单都来自不同的来源,其显示包裹编号的格式不同,唯一可靠的方法是识别10位模式,可能的字符(-、/、空格等)分隔,并使用后/前看确保它实际上是包裹编号。你知道吗

我的问题是:

1)我如何在考虑几个包裹被几个可能的字符分隔的可能性时保持向前/向后看?你知道吗

2)如果使用分隔字符,我如何强制它在整个过程中都被使用?所以12-34-567-89012 34 567 890而不是1234 56789012-34:567 890,这将阻止上面显示的最后一个示例。你知道吗

3)有没有更好的方法?你知道吗


Tags: and文件方法列表数量电话号码字符编号
1条回答
网友
1楼 · 发布于 2024-03-28 13:46:10

可以使用lookback强制使用相同的分隔字符:

r"""
\d{2}(?P<separator>[-:\s]?)
\d{2}(?P=separator)
\d{3}(?P=separator)
\d{3}(?:(?P=separator)\d{4})?"""

我想这个正则表达式和你描述的模式是一致的。我使用了您自己的正则表达式,添加了分隔符特性,并删除了“$”。我认为“$”把工作搞砸了。。。你知道吗

相关问题 更多 >