我需要一个正则表达式来匹配包含字母
A
、B
或 C
的字符串(1),但是如果一个字母直接在脱字符号(例如,A^
)之后出现,则例外(2)。没有连续的脱字符,但是字母和数字可以以所有长度和组合的形式出现。理想情况下,正则表达式应该不使用前瞻语法,因为我想在 Awk
脚本中使用它。43AA34C563B3545 : no match
43A34C563^BC3545 : no match
4334563^B3545 : match (the only letter is after the caret)
3345664345^CCC0 : no match
3345 : match (no letters)
我可以相对容易地使用 ^ [^ABC] + $
完成 #1,但当我尝试添加扩展时,例如,
^ [^ABC] + $ | ^ [0-9] * \ ^ D + [0-9] + $
它失败了。
gawk/awk 5.1.0
中使用\
转义符会出现警告:warning: regexp escape sequence '\d' is not a known regexp operator
。 - Lechu\d
,请使用[0-9]
代替... - Bohemian\d
。请使用字符类:[[:digit:]]
。 此外,我不知道您如何使用此正则表达式,但尽可能使用静态正则表达式-用/包围,而不是"-s:awk '/^((\^[ABC])|[[:digit:]])+$/' myFile
- vgersh99[0-9]
比[[:digit:]]
更容易和简单。 - Bohemian