我要查找所有以"0"开头的电话号码。和后面跟着10位数字。
r1=re.search('^[0]+d{10}',i)
然而,其中一些被写成"01-234-567-8-90",技术上是一个0后面跟着10个数字,但它里面有破折号。当我运行Regex搜索命令时,它不识别它。
是否有办法告诉正则表达式忽略某些字符,如";和"产生绯闻吗?
可以使用
re.search(r'0(?:-?d){10}',i)
正则表达式模式匹配
0
- 0位(?:-?d){10}
—匹配连续出现10次的非捕获组-?
-可选连字符d
-一个数字
查看regex演示
如果不希望在匹配的两端同时出现其他数字,则添加数字边界:
(?<!d)0(?:-?d){10}(?!d)
(?<!d)
后看确保左边没有数字,(?!d)
前看确保右边没有数字,所以我们匹配11位长的数字
我相信有更好的方法,但是你可以在正则表达式搜索之前删除连字符。
i.replace('-', ''))
为了验证它,你可以删除"-"像
phone_number_without_hyphens = phone.replace("-", "")
然后用regex
检查re.search('^[0]+d*{10}', phone_number_without_hyphens)
^[0(?:+44)][ -]?d[ -]?d[ -]?d[ -]?d[ -]?d[ -]?d[ -]?d[ -]?d[ -]?d[ -]?d$
或^ [0 (?: + 44)] (?:[-]?d){10}$ cleaner