Python 用于检测电话号码的正则表达式

Python 用于检测电话号码的正则表达式,python,regex,Python,Regex,我需要在给定的段落文本中找到一个电话号码,条件如下 电话号码所在的句子中应该有Phone/Ph/tel/Phone一词 EX:考虑下面的段落。 这是我的电话号码,我25岁,999-888-7894,我正在寻找一个正则表达式脚本 正如你所看到的,这一段有一个电话号码,在电话号码前31个字符的句子中有phone一词 因此,我想将其检测为电话号码,当且仅当其在电话号码之前或之后包含单词phone/Ph/tel/phone 50个字符时 我尝试在正则表达式中使用lookaround,但没有成功 impo

我需要在给定的段落文本中找到一个电话号码,条件如下

电话号码所在的句子中应该有Phone/Ph/tel/Phone一词

EX:考虑下面的段落。

这是我的电话号码,我25岁,999-888-7894,我正在寻找一个正则表达式脚本

正如你所看到的,这一段有一个电话号码,在电话号码前31个字符的句子中有phone一词

因此,我想将其检测为电话号码,当且仅当其在电话号码之前或之后包含单词phone/Ph/tel/phone 50个字符时

我尝试在正则表达式中使用lookaround,但没有成功

import re

phno = re.compile(r'(?<=Ph\s)(?<=Phone\s)(?<=tel\s)telephone(?<=telephone\s)\b([0-9]{3}[-][0-9]{3}[-][0-9]{4})\b',re.MULTILINE)

data = "This is my phone number and I am 25 years old, 999-888-7894 and I am looking for a regex script."

l = phno.findall(data)

print(l)

我得到的输出是空列表[],因为regex没有检测到单词“Phone”,我需要它检测电话号码前后的50个字符

假设您只想检测包含区号的连字符分隔的美国电话号码,您可以使用以下regex模式与re.findall:

脚本:

sentence = "This is my Phone number and I am 25 years old, 999-888-7894 and I am looking for a regex script."
numbers = re.findall(r'\b\d{3}-\d{3}-\d{4}\b', sentence)
print(numbers)
这张照片是:

['999-888-7894']
印刷品:

['999-888-7894', '555-555-1212']

可能是重复的,像这样试试@Thefourthbird谢谢。成功了。但是我在输出中得到一个空字符串。['999-888-7894', ] . 我们应该删除这个空字符串,@krishnaraogadde,它是由替换引起的,它将捕获第1组或第2组中的值。一个选项是检查组1或组2是否包含值。@krishnaraogadde我认为它可以工作。请看Downvoter:除了电话号码之外,其他任何东西都不可能与此正则表达式匹配。我的电话号码是867-5309。我没有对你投反对票,但可能是谁投了反对票,因为问题的重点是确保电话号码在手机、telehphone、,等等。OP已经知道匹配电话号码的正则表达式。因为\b是一个零长度断言,所以将其放在lookback中是毫无意义的。@Toto我正在确保'phone'后面跟着\b加上0到49个字符。如果是0个字符,则我确信电话号码前面有\b。但是如果它是从1到49,我只能通过做lookback测试来确定。在电话号码之前硬编码a\b是错误的,因为这与电话555-555-5555不匹配,电话和555-555-5555之间只有一个\b。仔细想想。lookbehind和non-capture组都是多余的,而不是\b?:.{0,49}@Toto。我仔细考虑了一下,修改了我的正则表达式。谢谢
import re

data = """This is my phone number and I am 25 years old, 999-888-7894 and I am looking for a regex script.
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  999-123-4567 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
And 555-555-1212 is my telephone."""

phno = re.compile(r'\b(?:phone|ph|telephone)\b.{0,49}\b(\d{3}[-]\d{3}[-]\d{4})\b|\b(\d{3}[-]\d{3}[-]\d{4})\b.{0,49}\b(?:phone|ph|telephone)\b', flags=re.I)

phones = [m.group(1) if m.group(1) else m.group(2) for m in phno.finditer(data)]
print(phones)
['999-888-7894', '555-555-1212']