开始和结束问题之间的正则表达式匹配

RegEx Match between beginning and ending problem

提问人:Alex Bäumler 提问时间:1/16/2023 更新时间:1/16/2023 访问量:32

问:

我想匹配“02A1”和“03”之间的所有内容,如果它介于两者之间有 14 个字符。

我的正则表达式模式如下所示:

(02A1)[0-9A-Z]{14}(03)

我的问题:它也匹配这个:

02A103EEFFFFF702A103

我做错了什么?“EEFFFFF7”显然不是在 02A1 和 03 之间,因为在 EEFFFFF7 之前有一个 03,之后有一个 02A1。

有人可以帮我吗?

正则表达式 vb.net 匹配

评论

1赞 Richard Henage 1/16/2023
看起来它按预期工作。如果这 14 个字符包含 或 ,是否希望它不匹配?02A103
0赞 Alex Bäumler 1/16/2023
我基本上只想匹配以 02A1 开头并以 03 结尾的所有内容,如果它的长度为 14 个字符。所以“02A103EEFFFFF702A103”不应该是匹配项,因为有 02A103 - 02A1 和 03 之间没有任何东西 -> 没有匹配,EEFFFFF7 -> 没有匹配,02A103 再次,没有匹配,因为它之间没有
0赞 Richard Henage 1/16/2023
您的问题是它一次匹配整个字符串:(第一部分)、(14 个字符)、(第二部分)02A103EEFFFFF702A103

答:

1赞 Wiktor Stribiżew 1/16/2023 #1

如果 14 个字母数字字符不能包含子字符串,请使用03

02A1(?:(?!03)[0-9A-Z]){14}03

如果它不能包含任何一个,请使用02A1

02A1(?:(?!03|02A1)[0-9A-Z]){14}03

请参阅此正则表达式演示

细节

  • 02A1- 一个字符串02A1
  • (?:(?!03|02A1)[0-9A-Z]){14}- 出现 14 个大写 ASCII 字母或数字,不以 或 char 序列开头0302A1
  • 03- 一个字符串。03

评论

1赞 Alex Bäumler 1/16/2023
第二个做到了,谢谢!