我想从字符串中匹配正确的电话号码。例如:
string := "my phone number is 15817452367"
re := regexp.MustCompile(`1[34578][0-9]{9}`)
re.FindAllString(string, -1)
-> 15817452367
此结果是正确的,但对于另一个字符串:
string := "my card number is 115817452367"
re := regexp.MustCompile(`1[34578][0-9]{9}`)
re.FindAllString(string, -1)
-> 15817452367 (invalid)
此正则表达式也与电话号码匹配,但我希望这不是有效值,我不想从电话号码中获取数字字符串。我该如何修复正则表达式?提前谢谢!
答案 0 :(得分:1)
您可以检查正则表达式的结束和结束,以查找字符串的结尾/结尾或非数字字符,并仅捕获电话号码。
以下是一些正常工作的正则表达式:
(?:^|[^0-9])(1[34578][0-9]{9})(?:$|[^0-9])
在Golang
re := regexp.MustCompile(`(?:^|[^0-9])(1[34578][0-9]{9})(?:$|[^0-9])`)
submatch := re.FindStringSubmatch("Phone Number: 15817452367;")
if len(submatch) < 2 {
// No match found
}
match := submatch[1]
<强>解释强>
查找字符串的开头或非数字字符。 附在非捕获组中。
(?:^|[^0-9])
找到您要搜索的电话号码。 附在捕获组中。
(1[34578][0-9]{9})
查找字符串的结尾或非数字字符。 附在非捕获组中。
(?:$|[^0-9])
答案 1 :(得分:0)
您可以检查匹配的字符串是否前面没有数字。
为了检查这一点,将模式嵌套在两个[^0-9]*
之间:它表示“没有或不是数字”。
regexp.MustCompile(`[^0-9]*1[34578][0-9]{9}[^0-9]*`)
这样,15817452367
将被检测为匹配,但115817452367
则不会。