繁体   English   中英

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)

Output:

<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

或者,如果您想匹配起始 substring 之后剩余 9 个字符的任何内容,请使用.{9}

'^\+61-{1}'不起作用的原因是它指定了前一个字符出现 1 次- {1}在每个字符之后总是隐含的,因此与'^\+61-'没有什么不同。

顺便说一句,对于 Python 中的正则表达式模式,始终使用原始字符串r""

另外,您在 Python 中,因此使用len检查字符串的长度很容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM