5

我正在尝试查找给定字符串(JFK)[FRA]使用正则表达式的机场代码。

我不必确定上述机场代码是否正确。大括号几乎可以包含任何三个大写字母。

这是我当前的解决方案,它适用于圆括号,但不适用于方括号:

[((\[]([A-Z]{{3}})[))\]]

谢谢!

4

3 回答 3

10

您的正则表达式似乎试图匹配太多,试试这个:

^[(\[][A-Z]{3}[)\]]$

^ 匹配行的开头(你可能需要也可能不需要)

[(\[] 是匹配的字符类([

[A-Z]{3}匹配三个大写字母

[)\]]是匹配的字符类)]

$ 匹配行尾(您可能需要也可能不需要)

点击这里查看测试结果

请注意,[and]是正则表达式中的特殊字符,我必须用 a 转义它们\以表示我想要一个文字字符。

希望这可以帮助

于 2012-07-03T12:12:17.180 回答
3

如果您想 (1) 匹配单个匹配组中的字母并且 (2) 仅匹配括号括号(不是每个都匹配),那么这非常困难。一种解决方案是:

.([A-Z]{3}).((?<=\(...\))|(?<=\[...\]))

第一部分与字母匹配,尾随的混乱检查括号/括号。

请参阅http://fiddle.re/u19v - 这匹配[ABC]and (DEF),但不匹配(PQR](“正确”答案确实如此)。

如果您想要匹配中的括号,请将捕获括号移到.

(.[A-Z]{3}.)((?<=\(...\))|(?<=\[...\]))

这里的根本问题是正则表达式不够强大,无法以您想要的方式匹配成对的值(如括号或括号)。所以每种不同类型的对都必须单独处理。

于 2012-07-03T12:16:46.053 回答
0

易于理解,更与方言无关且正确:

^([A-Z][A-Z][A-Z])\|\[[A-Z][A-Z][A-Z]\]$

您可能必须根据您的正则表达式方言更改括号和管道的转义。

于 2012-07-03T14:06:32.317 回答