我需要一个.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]+$
看起来非常基本,工作得相当好,但它并不能像上面所示的那样以各种不同的方式显示电话号码。
我对正则表达式很陌生,这似乎是一个很难问的问题,但如果有人能相对容易地做到这一点,我将不胜感激。
您可以使用以下正则表达式:
(?:1-?)?(?d{3})?[-.]?s*d{3}[-.]?s*d{4}
或带有"边界":
(?<!d)(?:1-?)?(?d{3})?[-.]?s*d{3}[-.]?s*d{4}(?!d)
参见regex演示
正则表达式解释:
(?:1-?)?
-可选的(1或零)1
序列和可选的连字符(?d{3})?
-3位序列,可选地用(...)
括起来[-.]?
-可选分隔符(-
或.
,如有必要可添加更多分隔符)s*
-0个或更多空白(如果需要排除换行符,请使用p{Zs}
)d{3}
-3位序列[-.]?
-1或0个分隔符s*
-0个或更多空白d{4}
-4位序列
环视(?<!d)
和(?!d)
只有在整个模式没有用数字括起来的情况下才允许匹配。