【问题标题】:OR condition for {} notation in Regular Expression正则表达式中 {} 符号的 OR 条件
【发布时间】:2019-08-15 08:54:20
【问题描述】:

我有一个正则表达式:

((?:4903|4905|4911|4936|6333|6759)[0-9]{12}|(?:4903|4905|4911|4936|6333|6759)[0-9]{14}))

您会注意到,在(?:4903|4905|4911|4936|6333|6759)[0-9] 中的 4 位数字之后,我需要 12 位数字或 14 位数字。相当于[0-9]{12|14} 的条件。

有没有办法做到这一点?如果需要更多说明,请告诉我。

【问题讨论】:

标签: python regex


【解决方案1】:

为什么不只是'[0-9]{12}($|[0-9]{2}$)'

>>> regex = re.compile('[0-9]{12}($|[0-9]{2}$)')
>>> for i in range(11, 15):
...     print(f'Match for string of length {i}: {re.match(regex, "0" * i) is not None}')
... 
Match for string of length 11: False
Match for string of length 12: True
Match for string of length 13: False
Match for string of length 14: True

如果您希望匹配不以字符串结尾结尾的 14 位数字,则需要将 '$' 标记替换为其他内容,例如 '?'

【讨论】:

  • 谢谢。早该想到这一点。但我无法通过替换 '$' 来匹配 14 位数字
  • 这是对我有用的正则表达式:`r'\b((?:4903|4905|4911|4936|6333|6759)[0-9]{12}(?:\b|[0-9]{2}\b))。接受这个是因为从你那里得到了这个想法。非常感谢
  • @MohitMotwani '$' 表示字符串的结尾;您可以使用其他东西来表示边界,例如' '(空格)或[^0-9](非数字字符)。不管怎样,很高兴听到你解决了你的问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-16
  • 2020-05-01
  • 1970-01-01
  • 2012-10-30
  • 2012-07-17
  • 1970-01-01
相关资源
最近更新 更多