Python 固定字符长度的正则表达式

Python regex for fixed character length

我是正则表达式的新手,正在尝试创建一个简单的正则表达式。到目前为止,我得到的结果适用于我要测试的格式。

import re
pattern = '^\+61-' #to ensure that the given string starts with +61
x = re.search(pattern, '+61-457999999')
print(x)

输出:

<re.Match object; span=(0, 4), match='+61-'>

我接下来要做的是添加字符数检查。所以我尝试将 {} 添加到我的模式的末尾。但这似乎不起作用。我尝试了各种组合:

例如'^\+61-{1}' - 似乎在开头寻找 1 次出现的 '+61-'

正则表达式的适当添加是什么:

  1. 起始字符总是'+61-4'
  2. 给定输入的长度始终为 13

这听起来像是一个简单的问题,但我找不到与 Python 和描述的场景完全匹配的答案。

一个通用的解决方案是将长度与前瞻相匹配:(?=^.{13}$)。完整示例:

>>> bool(re.search(r"(?=^.{13}$)^\+61-", '+61-457999999'))
True
>>> bool(re.search(r"(?=^.{13}$)^\+61-", '+62-457999999'))
False
>>> bool(re.search(r"(?=^.{13}$)^\+61-", '+61-4579999999'))
False
>>> bool(re.search(r"(?=^.{13}$)^\+61-", '+61-45799999'))
False

你也可以更精确地匹配格式,假设 -:

之后的数字
>>> bool(re.fullmatch(r"\+61-\d{9}", '+61-457999999'))
True
>>> bool(re.fullmatch(r"\+61-\d{9}", '+62-457999999'))
False
>>> bool(re.fullmatch(r"\+61-\d{9}", '+61-4579999999'))
False
>>> bool(re.fullmatch(r"\+61-\d{9}", '+61-45799999'))
False

如果要匹配起始子字符串后剩余 9 个字符的任何内容,请使用 .{9}

'^\+61-{1}' 不起作用的原因是它指定了前导字符 - 出现 1 次。 {1} 总是隐含在每个字符之后,所以这与 '^\+61-'.

没有什么不同

顺便说一句,总是在 Python 中使用 raw strings r"" for regex patterns

另外,您在 Python 中,因此可以使用 len.

轻松检查字符串的长度