如果在第一个“I”之前有一个字母数字字符,需要帮助缩小此正则表达式的范围,使其不返回记录
"I([ ]{1,2})([a-zA-Z]|\d){2,13}"
想从这个字符串中捕获I APF,而不是I ARPT。
I APF 'NAPLES MUNI ARPT. ' 42894 JEB 29785584
谢谢!
答案 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}
我不确定它的工作范围有多广(即使用不同的正则表达式库)