仅当至少 3 个字符时,正则表达式才会匹配 2 个字符之间的所有内容

RegEx match everything between 2 characters only if at least 3 characters

提问人:Alex Bäumler 提问时间:12/22/2022 最后编辑:CinCoutAlex Bäumler 更新时间:12/22/2022 访问量:71

问:

我正在尝试匹配“xAA”和“xFF”之间的所有字符,但前提是它们之间至少有 4 个字符。有没有一种简单的方法可以用正则表达式做到这一点?

例如,应匹配 xAA-12345-xFF,但应忽略 xAA-1-xFF。

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

"(?<=\xAA).*(?=\xFF)"

这确实匹配了这些字符之间的所有内容,但我找不到一种方法来仅在它们之间至少有 4 个字符的情况下进行匹配,有人可以帮我吗?

正则表达式 vb.net

评论

1赞 Wiktor Stribiżew 12/22/2022
如果你想匹配一个字母,为什么要逃跑?请提供一些带有真实示例的测试用例。xx
0赞 Wiktor Stribiżew 12/22/2022
和之间总是有吗?然后使用-<digits>-xAAxFF(?<=xAA-)\d{4,}(?=-xFF)
0赞 Alex Bäumler 12/22/2022
我应该更详细地解释这一点。我正在从串行端口接收数据,从十六进制 AA 开始,以十六进制 FF 结束。我想用至少 4 个字符匹配介于两者之间的所有内容,因为还有大量“AA 00 FF”字符串,我想过滤掉这些字符串。
0赞 Wiktor Stribiżew 12/22/2022
是否按预期工作?(?<=\xAA\s*)(?:(?!\xAA).)*?(?=\s*\xFF)

答:

0赞 Martin C. 12/22/2022 #1

快速而肮脏的黑客可能是:

"xAA....*xFF"

这需要三个 () 字符,后跟 0 个或多个 ()。....*

评论

0赞 Wiktor Stribiżew 12/22/2022
这不适用于具有多个匹配项的字符串,因为它将从最左边开始匹配。\xAA
0赞 Martin C. 12/22/2022
@WiktorStribiżew:我认为对于上述问题,这应该仍然有效吗?为什么这会是多场比赛的问题?但是我简化了正则表达式,但也许我没有完全理解源代码和预期的匹配行为。
0赞 CinCout 12/22/2022 #2

这样做:

xAA\S{4,}xFF

\S{4,}匹配至少 4 个非空格字符。

演示

0赞 Albina 12/22/2022 #3

(?<=xAA-)[0-9]{4,}(?=\-xFF)如果只有数字,则从中收回 12345xAA-12345-xFF

(?<=xAA-)[0-9a-zA-Z]{4,}(?=\-xFF)如果字母或数字是可能的

regex101.com