正则表达式过滤器在字母“I”之前用AlphaNumeric消除记录

时间:2008-11-23 13:08:51

标签: regex

如果在第一个“I”之前有一个字母数字字符,需要帮助缩小此正则表达式的范围,使其不返回记录

"I([ ]{1,2})([a-zA-Z]|\d){2,13}"

想从这个字符串中捕获I APF,而不是I ARPT。

I APF                     'NAPLES MUNI ARPT.            ' 42894 JEB 29785584 

谢谢!

4 个答案:

答案 0 :(得分:5)

\b表示正则表达式中的单词边界,因此以下内容应该有效(假设您对正则表达式的其余部分感到满意​​):

("\bI([ ]{1,2})([a-zA-Z]|\d){2,13}")

单词边界定义为单词字符和非单词字符之间的零宽度空格。根据您的正则表达式引擎,单词字符可能是字母数字字符或下划线,因此使用\ b将匹配-I ALF中的I ALF但不匹配_I ALF

答案 1 :(得分:2)

\bI[ ]{1,2}[A-Za-z0-9]{2,13}

答案 2 :(得分:1)

单词边界似乎是一个很好的解决方案。您没有告诉我们您将使用什么样的正则表达式引擎/语言:例如,JavaScript没有后视镜 正如另一个指出的那样,你的表达有点过于复杂(这会伤害速度) 我的版本是:

\bI  ?[A-Za-z\d]{2,13}

根据您的需要,有或没有捕获。您可能还希望使用\ b结束表达式,以确保表达式后不再有字母数字字符。

答案 3 :(得分:0)

你可以尝试做一个负面的后视:

(?<![a-zA-Z0-9])I([ ]{1,2})([a-zA-Z]|\d){2,13}

我不确定它的工作范围有多广(即使用不同的正则表达式库)