我需要.net的正则表达式,它可以从混合字符值中提取电话号码,例如以下示例:
yyy1-555-555-5555yyy1
yyy555-555-5555yyy1
yyy1(555)555-5555yyy1
yyy5555555555yyy1
yyy1-(555)-555-5555yyy1
yyy1(555)-555-5555yyy1
yyy(555)555-5555yyy1
模式^\+?([0-9]+[ -]?){5,}[0-9]+$
看起来非常基本且工作得相当好,但它不能用于如上所示的电话号码的所有不同方式。
我对正则表达式很陌生,这看起来似乎有很多要问,但如果对某人来说相对容易,我会很感激帮助。
答案 0 :(得分:1)
您可以使用以下正则表达式执行此操作:
(?:1-?)?\(?\d{3}\)?[-.]?\s*\d{3}[-.]?\s*\d{4}
或“边界”:
(?<!\d)(?:1-?)?\(?\d{3}\)?[-.]?\s*\d{3}[-.]?\s*\d{4}(?!\d)
请参阅regex demo
正则表达式的解释:
(?:1-?)?
- 1
的可选(1或0)序列和可选的连字符\(?\d{3}\)?
- 可选地用(...)
[-.]?
- 可选的分隔符(-
或.
,必要时添加更多内容)\s*
- 0个或更多空格(如果您需要排除换行符,请使用\p{Zs}
)\d{3}
- 3位数序列[-.]?
- 1或0个分隔符\s*
- 0个或更多空格\d{4}
- 4位数序列。如果整个模式没有用数字括起来,那么环顾(?<!\d)
和(?!\d)
只允许匹配。