我的内容如下:
001 B OR 06K24b 01 TCP SC C 02
001 B CC 12K48b 99 BCP SC A 02 1982-11-09
001 B OR 06K24b 01 TCP SC C 02
我希望我的正则表达式匹配第 2 行,但不匹配第 1 行或第 3 行。
我认为我需要的是积极的回顾,但我不确定。即使我是正确的,我也不知道如何正确地应用它。
我尝试了以下方法:
^(?<=([0-9]{3} [A-Z] [A-Z]{2} ..K..b [0-9]{2} [A-Z]{3} [A-Z]{2} [A-Z] [0-9]{2})).*
和积极前瞻:
^(?!([0-9]{3} [A-Z] [A-Z]{2} ..K..b [0-9]{2} [A-Z]{3} [A-Z]{2} [A-Z] [0-9]{2}))$
请指导我找到正确的解决方案。谢谢!
答案1
由于第 2 行以类似日期的内容结尾,因此您可以尝试以下正则表达式:
^.+\d{4}-\d{2}-\d{2}$
它测试一行是否以四位数字结尾,后跟一个破折号、两位数字、一个破折号和两位数字。
答案2
这个正则表达式重新利用了你的大部分正则表达式:
^[0-9]{3} [A-Z] [A-Z]{2} ..K..b [0-9]{2} [A-Z]{3} [A-Z]{2} [A-Z] [0-9]{2} [0-9].*
正则表达式匹配如下:
节点 | 解释 |
---|---|
^ |
字符串的开头 |
[0-9]{3} |
'0' 至 '9' 中的任意字符(3 次) |
' ' | 空间 |
[A-Z] |
'A' 至 'Z' 中的任意字符 |
' ' | 空间 |
[A-Z]{2} |
'A' 至 'Z' 中的任意字符(2 次) |
' ' | 空间 |
. |
除 \n 之外的任意字符 |
. |
除 \n 之外的任意字符 |
K |
钾 |
. |
除 \n 之外的任意字符 |
. |
除 \n 之外的任意字符 |
b |
‘b’ |
[0-9]{2} |
'0' 至 '9' 中的任意字符(2 次) |
' ' | 空间 |
[A-Z]{3} |
'A' 至 'Z' 中的任意字符(3 次) |
' ' | 空间 |
[A-Z]{2} |
'A' 至 'Z' 中的任意字符(2 次) |
' ' | 空间 |
[A-Z] |
'A' 至 'Z' 中的任意字符 |
' ' | 空间 |
[0-9]{2} |
'0' 至 '9' 中的任意字符(2 次) |
' ' | 空间 |
[0-9] |
'0' 至 '9' 中的任意字符 |
.* |
除 \n 之外的任意字符(0 次或更多次(匹配尽可能多的次数)) |