捕获 [A-Z0-9]{6} - 但前提是它不是 \d{6}
Capture [A-Z0-9]{6} - but only if it's not \d{6}
我有一封电子邮件,其中包含一些 11 位长的数字 - 这很简单:\d{11}
。
还有长度为 6 个字符的“单词”。
那里的字母总是大写的。
它可能包含 1-5 个数字,但绝不会包含 6。它永远不会扩展 6 的大小。
\b(\d{11}|([A-Z0-9]{6}))(\s|\.|$)
也捕获例如我想省略的“123456”。
它在一封电子邮件中,所以我使用 VBA 和它的“Microsoft VBScript Regular Expression 5.5”-Library。
您可以使用这个正则表达式:
\b(?:\d{11}|(?=\d{0,5}[A-Z])[A-Z0-9]{6})(?:[\s\.]|$)
(?=\d{0,5}[A-Z])
是一个肯定的前瞻,它断言在 0 到 5 位数字之后存在大写字母,因此当第二个交替选项中有 6 位数字时匹配失败。
我想你在追求:
\b(?:\d{11}|(?!\d{6})[A-Z\d]{6})\b
网上看一个demo
\b
- 单词边界。
(?:
- 打开非捕获组:
d{11}
- 十一个数字。
|
- 或者:
(?!\d{6})
- 6 个数字的负前瞻。
[A-Z\d]{6}
- 恰好六个大写字母或数字。
)
- 关闭非捕获组。
\b
- 单词边界。
我有一封电子邮件,其中包含一些 11 位长的数字 - 这很简单:\d{11}
。
还有长度为 6 个字符的“单词”。
那里的字母总是大写的。
它可能包含 1-5 个数字,但绝不会包含 6。它永远不会扩展 6 的大小。
\b(\d{11}|([A-Z0-9]{6}))(\s|\.|$)
也捕获例如我想省略的“123456”。
它在一封电子邮件中,所以我使用 VBA 和它的“Microsoft VBScript Regular Expression 5.5”-Library。
您可以使用这个正则表达式:
\b(?:\d{11}|(?=\d{0,5}[A-Z])[A-Z0-9]{6})(?:[\s\.]|$)
(?=\d{0,5}[A-Z])
是一个肯定的前瞻,它断言在 0 到 5 位数字之后存在大写字母,因此当第二个交替选项中有 6 位数字时匹配失败。
我想你在追求:
\b(?:\d{11}|(?!\d{6})[A-Z\d]{6})\b
网上看一个demo
\b
- 单词边界。(?:
- 打开非捕获组:d{11}
- 十一个数字。|
- 或者:(?!\d{6})
- 6 个数字的负前瞻。[A-Z\d]{6}
- 恰好六个大写字母或数字。)
- 关闭非捕获组。
\b
- 单词边界。