我正在尝试使用正则表达式找到包含(JFK)
或[FRA]
字符串的代码。
我不必确定所提到的机场代码是否正确。大括号几乎可以包含任何三个大写字母。
这是我当前的解决方案,它适用于圆括号,但不适用于方括号:
[((\[]([A-Z]{{3}})[))\]]
谢谢!
答案 0 :(得分:5)
你的正则表达似乎试图匹配太多,试试这个:
^[(\[][A-Z]{3}[)\]]$
^
匹配行的开头(您可能需要或可能不需要)
[(\[]
是与(
或[
[A-Z]{3}
匹配三个国会大厦字母
[)\]]
是与)
或]
$
匹配行尾(您可能需要或可能不需要)
Click here to see the test results
请注意,[
和]
是正则表达式中的特殊字符,我必须使用\
来转义它们,以表明我想要一个文字字符。
希望这有帮助
答案 1 :(得分:3)
如果你想(1)匹配单个匹配组中的字母,(2)只匹配parens 或括号(不是每个中的一个),那么这很难。一个解决方案是:
.([A-Z]{3}).((?<=\(...\))|(?<=\[...\]))
其中第一部分与字母匹配,尾部混乱检查括号/ parens。
请参阅http://fiddle.re/u19v - 这与[ABC]
和(DEF)
匹配,但不匹配(PQR]
(“正确”答案的匹配)。
如果您想要匹配中的parens,请将捕获的parens移到.
之外:
(.[A-Z]{3}.)((?<=\(...\))|(?<=\[...\]))
这里的根本问题是正则表达式不够强大,无法按照您希望的方式匹配值对(如parens或括号)。所以每种不同的一对都必须单独处理。
答案 2 :(得分:0)
易于理解,更多的方言不可知和正确:
^([A-Z][A-Z][A-Z])\|\[[A-Z][A-Z][A-Z]\]$
根据您的正则表达方言,您可能需要更改parens和pipe的转义。