需要帮助编写条件正则表达式

时间:2015-03-11 09:48:19

标签: c# regex string

我有一个代表电话号码的字符串。

格式为:[电话号码] - [类型{1-3}] [ - | “”] [客户姓名]

电话号码是强制性的,但类型和名称不是。

类型必须以“ - ”开头,长度为1-3个字符,以“ - ”或“”(空格)或无结果(字符串结尾)结束

我试过这个正则表达式:

        var phonrType = "-([A-Za-z]{1,3})(-?|\\s)";
        Match m = Regex.Match(str, phonrType);

但我无法弄清楚如何在没有名字的情况下处理电话类型的字符串:

"03 7963324A-FAX"    --> the regex fails for this input

我不知道怎么说在类型之后可以有“ - ”,“或”,或者什么都没有(其他任何东西都不是有效的手机类型)。

以下是一些用于澄清的输入字符串:

"03 7963324-BOB/BOB" --> no phone type

"03 7963324-MOB-BOB/BOB" --> phone type is: "MOB"

"03 7963324A-FAX" -->phone type is "FAX"

感谢。

2 个答案:

答案 0 :(得分:1)

尝试使用:

(?:-([A-Za-z]{1,3})(?:[- ]|$))

答案 1 :(得分:1)

我会使用带有lookbehinds和lookaheads的正则表达式模式来匹配我想要的而不捕获其他组。

(?<=\-)[A-Za-z]{1,3}(?=\-|$)

以下是测试结果:

"03 7963324-BOB/BOB" --> no match
"03 7963324-MOB-BOB/BOB" --> the whole match is "MOB"
"03 7963324A-FAX" --> the whole match is "FAX"