python实现,加上详细注释请写出并验证表示国内座机号码的正则表达式,请注意不同地区区号和座机号码位数的不同。
时间: 2023-11-04 07:04:13 浏览: 143
验证手机号等正则表达式
5星 · 资源好评率100%
好的,以下是Python实现的表示国内座机号码的正则表达式,注释已经详细说明每一部分的含义:
```python
import re
# 定义正则表达式,用于匹配国内座机号码
pattern = r'^0(10|2[0-9]|[3-9]\d{2})-?\d{7,8}$'
# 测试用例
test_cases = [
'010-12345678',
'020-1234567',
'0319-12345678',
'0755-12345678',
'0731-1234567',
'0371-12345678',
'0517-1234567',
'0923-12345678',
'0999-1234567',
'012345678',
'099-12345678',
'099-1234567',
'099-123456789'
]
# 遍历测试用例,逐个匹配正则表达式
for case in test_cases:
match = re.search(pattern, case)
if match:
print(f"{case} 是一个合法的座机号码")
else:
print(f"{case} 不是一个合法的座机号码")
```
上面的正则表达式可以匹配以下情况的座机号码:
- 以0开头的区号,包括010、02x、03x~09x
- 区号后面可以有一个连字符“-”,也可以没有
- 座机号码有7或8位,没有区号的话总共是10位
其中,`^`和`$`分别表示正则表达式的开头和结尾,确保整个字符串都符合要求。区号部分的正则表达式为:
```
0(10|2[0-9]|[3-9]\d{2})
```
其中:
- `0` 表示必须以0开头
- `(10|2[0-9]|[3-9]\d{2})` 表示区号的取值范围,包括010、02x、03x~09x。其中`|`表示或者,`\d`表示任意数字,`[]`表示取值范围,`{2}`表示数字必须出现2次。
座机号码部分的正则表达式为:
```
-?\d{7,8}
```
其中:
- `-?` 表示连字符可以有0个或1个,即可有可无
- `\d{7,8}` 表示座机号码有7或8位数字,用逗号分隔表示数量的范围。
最后,使用Python的`re`模块的`search`方法进行匹配,如果匹配到了就说明这是一个合法的座机号码。
阅读全文