匹配字符串中 phone 数字的正则表达式
Regular expression to match a phone number in string
我正在尝试匹配特定格式的 phone 数字,例如 021-768-4444
为此,我编写了一个程序,在将字符串传递给时识别有效的 phone 数字正则表达式,我的程序成功地完成了这个任务,但是当我传递一个 phone 数字而不是这种格式时,它也会识别而不是向我显示 None
:
代码如下:
import re
phoneNumRegex = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d')
mo = phoneNumRegex.search('My number is 415-555-42424854-201.')
if mo is not None:
print('Phone number found: ' + mo.group())
else:
print("Pattern is not matched")
上面的代码给我这个输出:
Phone number found: 415-555-4242
虽然我希望它是 None
,因为我知道如果在字符串中找不到正则表达式模式,search() 方法将 return None。
但是如果我传递了正确的 phone 数字,它会按预期工作:
mo = phoneNumRegex.search('My number is 415-555-4242.')
这对我来说很奇怪,有人可以指导我哪里错了吗?
任何帮助都是真的 appreciated.Thanks
search
检查正则表达式是否匹配字符串的一部分。即在字符串中搜索正则表达式。
match
检查正则表达式是否匹配整个字符串。
mo = phoneNumRegex.match('My number is 415-555-42424854-201.')
mo is None //True
另一种选择是匹配字符串的开头和结尾-
phoneNumRegex = re.compile(r'^\d\d\d-\d\d\d-\d\d\d\d$')
mo = phoneNumRegex.search('My number is 415-555-42424854-201.')
mo is None //True
(?<!\d)\d{3}\-\d{3}\-\d{4}(?!\d)
https://regex101.com/r/VAaA7k/1
phoneNumRegex = re.compile(r'(?<!\d)\d{3}\-\d{3}\-\d{4}(?!\d)')
为防止其他不需要的匹配项,请使用更强的正则表达式模式
(?:^|:|(?<=\s))(\d{3}\-\d{3}\-\d{4})(?=[\s,;.]|$)
作为@deceze 的回复,根据您给定的正则表达式,它的工作方式与您从未提及的一样 "it shouldn't be longer"。
Adding \b at end of regex will work for you
喜欢下面
import re
phoneNumRegex = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d\b')
mo = phoneNumRegex.search('My number is 415-555-42424854-201.')
if mo is not None:
print('Phone number found: ' + mo.group())
else:
print("Pattern is not matched")
我正在尝试匹配特定格式的 phone 数字,例如 021-768-4444
为此,我编写了一个程序,在将字符串传递给时识别有效的 phone 数字正则表达式,我的程序成功地完成了这个任务,但是当我传递一个 phone 数字而不是这种格式时,它也会识别而不是向我显示 None
:
代码如下:
import re
phoneNumRegex = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d')
mo = phoneNumRegex.search('My number is 415-555-42424854-201.')
if mo is not None:
print('Phone number found: ' + mo.group())
else:
print("Pattern is not matched")
上面的代码给我这个输出:
Phone number found: 415-555-4242
虽然我希望它是 None
,因为我知道如果在字符串中找不到正则表达式模式,search() 方法将 return None。
但是如果我传递了正确的 phone 数字,它会按预期工作:
mo = phoneNumRegex.search('My number is 415-555-4242.')
这对我来说很奇怪,有人可以指导我哪里错了吗? 任何帮助都是真的 appreciated.Thanks
search
检查正则表达式是否匹配字符串的一部分。即在字符串中搜索正则表达式。
match
检查正则表达式是否匹配整个字符串。
mo = phoneNumRegex.match('My number is 415-555-42424854-201.')
mo is None //True
另一种选择是匹配字符串的开头和结尾-
phoneNumRegex = re.compile(r'^\d\d\d-\d\d\d-\d\d\d\d$')
mo = phoneNumRegex.search('My number is 415-555-42424854-201.')
mo is None //True
(?<!\d)\d{3}\-\d{3}\-\d{4}(?!\d)
https://regex101.com/r/VAaA7k/1
phoneNumRegex = re.compile(r'(?<!\d)\d{3}\-\d{3}\-\d{4}(?!\d)')
为防止其他不需要的匹配项,请使用更强的正则表达式模式
(?:^|:|(?<=\s))(\d{3}\-\d{3}\-\d{4})(?=[\s,;.]|$)
作为@deceze 的回复,根据您给定的正则表达式,它的工作方式与您从未提及的一样 "it shouldn't be longer"。
Adding \b at end of regex will work for you
喜欢下面
import re
phoneNumRegex = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d\b')
mo = phoneNumRegex.search('My number is 415-555-42424854-201.')
if mo is not None:
print('Phone number found: ' + mo.group())
else:
print("Pattern is not matched")