我必须从免费形式的文本中提取电话号码。
如何在python中使用reg-ex来管理它?
我找到一个是为了提取电子邮件地址。 https://gist.github.com/dideler/5219706
我使用电话号码正则表达式而不是电子邮件地址正则表达式实现了相同的方法,但我无法获得输出。
def get_phoneNumber(text):
phone_number = ""
regex = re.compile("((\(\d{3,4}\)|\d{3,4}-)\d{4,9}(-\d{1,5}|\d{0}))|(\d{4,12})")
for phoneNumber in get_phoneNumbers(text, regex):
phone_number = phone_number + phoneNumber + "\n"
return phone_Number
def get_phoneNumbers(s, regex):
return (phoneNumber[0] for phoneNumber in re.findall(regex, s)
我怎样设法做到这一点?
答案 0 :(得分:3)
此正则表达式匹配来自北美的典型电话号码
匹配3334445555,333.444.5555,333-444-5555,333 444 5555,(333)444 5555及其所有组合,如333 4445555,(333)4445555或333444-5555。 不符合国际标记+13334445555,但匹配国内部分+1 333 4445555。
\(?\b[2-9][0-9]{2}\)?[-. ]?[2-9][0-9]{2}[-. ]?[0-9]{4}\b
来源:RegexBuddy
以下Python代码遍历所有匹配
for match in re.finditer(r"\(?\b[2-9][0-9]{2}\)?[-. ]?[2-9][0-9]{2}[-. ]?[0-9]{4}\b", subject):
# match start: match.start()
# match end (exclusive): match.end()
# matched text: match.group()
您期待什么样的模式?
答案 1 :(得分:3)
您必须构建一个模式才能将其与regexp匹配。 问题是你要找的格式是什么?
为了能够做到这一点,你应该对用例如何显示电话号码进行一些研究。
因此,我希望您通过匹配电话号码来定义您的意思。
我只是说两者之间存在巨大差异: - 我想匹配来自任何国家,移动电话或固定电话的文本中的电话号码,任何格式,随机空格和(,)字符 要么 - 我希望匹配匈牙利的电话号码,+ xx(空格)xxxxxxx(空格)格式,始终保持一致。
要点: 为了能够使用正则表达式构建模式并使用它来匹配文本中的所有电话号码,您必须了解不同的表示形式,这意味着您期望电话号码看起来像什么。如果您的模式不正确,您可能会错过很多电话号码。
希望这段代码有充分的理由, V
答案 2 :(得分:3)
这应该找到给定字符串中的所有电话号码,包括国际号码。以@buckley为例,让我们使用字符串
text ="""匹配3334445555,333.444.5555,333-444-5555,333 444 5555,(333)444 5555及其所有组合,如333 4445555,(333 )4445555或333444-5555。不符合国际标记+13334445555,但匹配国内部分+1 333 4445555。"""
re.findall(r' +?(?[1-9] [0-9 .-()] {8,} [0-9]',text)
>>> re.findall(r'[\+\(]?[1-9][0-9 .\-\(\)]{8,}[0-9]', text)
['3334445555', '333.444.5555', '333-444-5555', '333 444 5555',
'(333) 444 5555', '333 4445555', '(333)4445555', '333444-5555',
'+13334445555', '+1 333 4445555']
基本上,正则表达式列出了这些规则
答案 3 :(得分:0)
所以我认为我对你的问题有所了解。
这就是我要按顺序做的事情: