[英]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-'
。
什么是正则表达式的适当补充,所以:
'+61-4'
这听起来像是一个简单的问题,但我无法为 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.