【问题标题】:regex - tracking numbers 2018正则表达式 - 跟踪号码 2018
【发布时间】:2018-11-17 23:57:34
【问题描述】:

我创建了一个引用该线程的新线程,该线程已有 9 年历史:

(Regular Expression patterns for Tracking numbers)

目前,我的问题是围绕 UPS 跟踪号的格式解决的。根据 UPS.com,1Z 的运单号格式应为 1Z + 6 个字符(数字或字母)+ 2 个字符(数字或字母)+ 8 个字符(数字或字母),示例格式:1Z 89X406 C8 33660056,然而在上面的线程链接中引用的 UPS 示例中,匹配格式以:1Z 89S 406 B8 3322 005 6

为中心

在第二种匹配格式中,使用的模式是:

\b(1Z ?[0-9A-Z]{3} ?[0-9A-Z]{3} ?[0-9A-Z]{2} ?[0-9A-Z]{4} ?[0-9A-Z]{3} ?[0-9A-Z]

但是,您也可以使用此模式(匹配第一种格式,根据 UPS 报价正确格式):\b(1Z ?[0-9A-Z]{6} ?[0-9A-Z]{2} ?[0-9A-Z]{8}

我想我的问题归结为使用任一匹配模式是否有效率。我不明白为什么上面链接的 OP 使用第二种匹配模式,而不是符合 UPS 跟踪号格式的模式。

在此先感谢,希望这对以后的其他人有所帮助。

【问题讨论】:

  • 第二个更严格,因为它只匹配 6 个连续的字母数字字符,而第一个允许 3 个组之间有空格。所以这取决于您输入的格式有多严格,因为它可能并不总是符合UPS指定的格式
  • 嗯,第二个模式与第一个线程中的1Z 89S 406 B8 3322 005 6 不匹配,这可能是{3}s 而不是{6}s 的原因

标签: python regex python-3.x


【解决方案1】:

如果是我,我根本不会介意空格,因为它们似乎无关紧要。

tracking_number = "1Z 89S 406 B8 3322 005 6"
# Strip spaces out
tracking_number = tracking_number.replace(' ', '')
match = re.search(r'1Z[A-Z0-9]{16}', tracking_number)

【讨论】:

  • 对,但是如果有人输入带有空格的跟踪号怎么办。本质上,我的脚本是遍历数据集并确定是否存在跟踪号。如果你得到一个带空格的数字,那么你的表达式将不起作用。
  • 假设您可以控制数据集,您应该规范化所有运单号(即所有运单号都应该省略空格)。然后查找将是微不足道的,因为您可以将它们放在 setdict 中,然后查看是否匹配。如果您无法控制数据集,则可能必须使用考虑空格的正则表达式。
猜你喜欢
  • 2023-03-12
  • 1970-01-01
  • 2015-12-18
  • 2019-05-02
  • 2016-12-12
  • 2014-12-10
  • 1970-01-01
  • 2017-09-23
  • 2014-02-15
相关资源
最近更新 更多