我正在尝试查找给定字符串(JFK)
或[FRA]
使用正则表达式的机场代码。
我不必确定上述机场代码是否正确。大括号几乎可以包含任何三个大写字母。
这是我当前的解决方案,它适用于圆括号,但不适用于方括号:
[((\[]([A-Z]{{3}})[))\]]
谢谢!
我正在尝试查找给定字符串(JFK)
或[FRA]
使用正则表达式的机场代码。
我不必确定上述机场代码是否正确。大括号几乎可以包含任何三个大写字母。
这是我当前的解决方案,它适用于圆括号,但不适用于方括号:
[((\[]([A-Z]{{3}})[))\]]
谢谢!
您的正则表达式似乎试图匹配太多,试试这个:
^[(\[][A-Z]{3}[)\]]$
^
匹配行的开头(你可能需要也可能不需要)
[(\[]
是匹配的字符类(
或[
[A-Z]{3}
匹配三个大写字母
[)\]]
是匹配的字符类)
或]
$
匹配行尾(您可能需要也可能不需要)
请注意,[
and]
是正则表达式中的特殊字符,我必须用 a 转义它们\
以表示我想要一个文字字符。
希望这可以帮助
如果您想 (1) 匹配单个匹配组中的字母并且 (2) 仅匹配括号或括号(不是每个都匹配),那么这非常困难。一种解决方案是:
.([A-Z]{3}).((?<=\(...\))|(?<=\[...\]))
第一部分与字母匹配,尾随的混乱检查括号/括号。
请参阅http://fiddle.re/u19v - 这匹配[ABC]
and (DEF)
,但不匹配(PQR]
(“正确”答案确实如此)。
如果您想要匹配中的括号,请将捕获括号移到.
:
(.[A-Z]{3}.)((?<=\(...\))|(?<=\[...\]))
这里的根本问题是正则表达式不够强大,无法以您想要的方式匹配成对的值(如括号或括号)。所以每种不同类型的对都必须单独处理。
易于理解,更与方言无关且正确:
^([A-Z][A-Z][A-Z])\|\[[A-Z][A-Z][A-Z]\]$
您可能必须根据您的正则表达式方言更改括号和管道的转义。