匹配的正则表达式优先级(前视和后视正则表达式)

时间:2013-10-28 02:35:02

标签: regex vb.net

目前我有一个怪物正则表达式,目前正在研究这个最佳功能。

我的正则表达式如下所示,我很好奇是否有办法在一个函数中优先处理正则表达式,而不是只查找可能存在的特定匹配。

示例:

如果在我的字符串中我匹配([\d]+/[\d]+)([\d]+ / [\d]+),则会先选择该匹配。

如果上述匹配项不存在,那么现有的([\d]+-[\d]+)([\d]+ - [\d]+)就会选择匹配

之后如果([\d]+)那么它将选择该匹配作为结束标记。如果没有这些,那么它将继续进行任何其他比赛。

所以我的问题是:

有正则表达式可以优先考虑哪个匹配优先吗?

示例:我的一些地址字符串格式为1 - 12 example street, 通常,正则表达式会提取12 example street而不是1 - 12 example street

谢谢!

完整的正则表达式如下:

New Regex("( ([\d]+) | ([\d]+-[\d]+) | ([\d]+ - [\d]+) | CAR
SMOULDERING | GAS BOTTLE EXPLOSION | INPUT | OFF | OPPOSITE | CNR |
SPARKING | INCIC1 | INCIC3 | STRUC1 | STRUC3 | G&SC1 | G&SC3 | ALARC1 | 
ALARC3 | NOSTC1| NOSTC3 | RESCC1 | RESCC3 | HIARC1 | HIARC3 | CAR
ACCIDENT - POSS PERSON TRAPPED | EXPLOSIONS HEARD | WASHAWAY AS A
RESULT OF ACCIDENT | ENTRANCE | ENT |FIRE| LHS | RHS | POWER LINES
ARCING AND SPARKING | SMOKE ISSUING FROM FAN | CAR FIRE | FIRE ALARM
OPERATING | GAS LEAK | GAS PIPE | NOW OUT | ACCIDENT | SMOKING | ROOF | 
GAS | REQUIRED | FIRE | LOCKED IN CAR | SMOKE RISING | SINGLE CAR
ACCIDENT | ACCIDENT | FIRE)(.*?)(?=\SVSE| M | SVC | SVSW | SVNE | SVNW
)", RegexOptions.RightToLeft)

1 个答案:

答案 0 :(得分:0)

首先更改3的顺序:

(\d+-\d+) | (\d+ - \d+) | (\d+ )

而不是:

([\d]+) | ([\d]+-[\d]+) | ([\d]+ - [\d]+)