使用正则表达式从此字符串中拆分电话号码和传真号码

时间:2015-06-13 10:14:39

标签: regex

考虑下面给出的是一个字符串

PO BOX编号1234, CA - 3265 电话:+ 1-200-200-2000传真:+ 1-200-200-2001
邮政编码1234, CA - 3265服务:+ 1-200-200-2002 \ + 1-200-200-2022 F:+ 1-200-200-2003
邮政编码1234, CA-3265护理:+ 1-200-200-2004 f:+ 1-200-200-2005
邮政编码1234, CA - 3265火灾:+ 1-200-200-2006传真:+ 1-200-200-2007
邮政编码1234, CA - 3265帮助:+ 1-200-200-2008传真 - + 1-200-200-2009
邮政编码1234, CA - 3265传真:(+ 123)-4567890 \(+ 123)-4567891

下面提到的正则表达式是我用来查找不同表示形式的传真号码的正则表达式

(?:(f|F)((a|A)(X|x))?(?:\s?(\-|\:)?\s?))(?:\s?[0-9\+\.\(\)\/\\\-]\/?\\?\s?){7,30}

例如:上面的正则表达式将匹配给定字符串中的所有传真,如下所示

FAX:+ 1-200-200-2001
F:+ 1-200-200-2003
f:+ 1-200-200-2005
传真:+ 1-200-200-2007
传真 - + 1-200-200-2009
传真:(+ 123)-4567890 \(+ 123)-4567891

注意:除了接收传真之外,我正在考虑将电话号码作为给定文本中可用数字的其余部分。
实施例 电话:+ 1-200-200-2000
服务:+ 1-200-200-2002 \ + 1-200-200-2022
护理:+ 1-200-200-2004
火灾:+ 1-200-200-2006
帮助:+ 1-200-200-2008

所以我需要文字不以[faxFAX] 开头的电话号码。我试过[^faxFAX]只是改变了上面指定的正则表达式,但我无法获得所需的结果。请帮我写一个正则表达式。

1 个答案:

答案 0 :(得分:1)

您可以使用(*SKIP)(*FAIL)

(?:(f|F)((a|A)(X|x))?(?:\s?(\-|\:)?\s?))(?:\s?[0-9\+\.\(\)\/\\\-]\/?\\?\s?){7,30}(*SKIP)(*FAIL)|(?:\s?[0-9\+\.\(\)\/\\\-]\/?\\?\s?){7,30}

请参阅DEMO

修改 Explanation of (*SKIP)(*FAIL},如评论中所示。