尝试使用正则表达式电话号码,无法使其正常工作,也不会发现我的正则表达式有什么问题。 这是我正在运行的代码:
import re
text = 'random text 058-6959503 -'
cellular = re.findall(r'/^05\d([-]{0,1})\d{7}$/',text )
print(cellular)
它什么都不返回。帮助
答案 0 :(得分:2)
你的正则表达式应该是
r'05\d-?\d{7}'
所以你的完整代码:
import re
text = 'random text 058-6959503 -'
cellular = re.findall(r'05\d-?\d{7}',text )
print(cellular)
输出:
['058-6959503']
你的错误/并发症:
^
。$
。\b
(字边界)代替原始^
和$
。/
。{0,1}
。?
醇>
答案 1 :(得分:0)
第一个问题是您用于正则表达式的语法是错误的。你不需要r'...'
内的斜杠。其次,即使语法正确,您使用的正则表达式也过于严格。 ^
表示您希望匹配从行的开头开始,而$
表示匹配以行尾结束。 text
有其他前导和尾随字符,因此您的正则表达式不匹配。
对于正则表达式,您可以使用05\d-?\d{7}
之类的简单内容。请注意,-?
与([-]{0,1})
答案 2 :(得分:0)
如果您不需要模式匹配整个字符串? 但仍想匹配字符串中的完整单词?
然后,您可以用字边界^
替换开始$
和结束\b
\b
标记单词字符和非单词字符或行的开头/结尾之间的转换。
示例:
import re
text = 'random text 058-6959503 more text 0501234567 plus what should not match: 0512345678910 -'
cellular = re.findall(r'\b05\d-?\d{7}\b',text )
print(cellular)
<强>输出:强>
['058-6959503', '0501234567']
顺便说一下,x{0,1}
之类的内容只是x?
答案 3 :(得分:0)
您可以使用:
re.findall(r'\d{3}-?\d{7}',text)
这完全取决于你想要找到的表达类型。
答案 4 :(得分:-1)
您可以使用is digit()来获取数字
text = 'random text 058-6959503 -'
print ''.join(c for c in text if c.isdigit())
0586959503