简单的python常规ex不工作

时间:2018-06-16 14:07:41

标签: python regex

尝试使用正则表达式电话号码,无法使其正常工作,也不会发现我的正则表达式有什么问题。 这是我正在运行的代码:

import re

text = 'random text    058-6959503     -'
cellular = re.findall(r'/^05\d([-]{0,1})\d{7}$/',text )
print(cellular)

它什么都不返回。帮助

5 个答案:

答案 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']

你的错误/并发症:

  1. 您的电话号码不在字符串的开头,因此请勿使用^
  2. 您的电话号码不在字符串的末尾,因此请勿使用$
  3. 考虑使用\b(字边界)代替原始^$
  4. 请勿在正则表达式的开头和结尾使用/
  5. 您可以使用{0,1}
  6. 代替?

答案 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