是否可以为这种类型的文本编写正则表达式?

1 c# regex

我需要为我公司的'选项符号'编写正则表达式,以便我们可以在我们的网站上验证这些符号.

选项符号由两部分组成:

Part1         Part2
_ _ _ _ _ _ | _ _ _ _ _ _ _ _ _ 
Run Code Online (Sandbox Code Playgroud)

我可以为Part2编写正则表达式,因为它非常简单.

但是,Part1(前6个字符位置)可能有点复杂.

归结为:

  • Part1的长度必须为{6}个字符.
  • 第一个位置必须有{1,4}个字母字符.
  • 之后,可以选择{1}个数字字符.
  • 最后,剩下的其余字符必须是空格,因此Part1总计为6个字符.

我遇到的问题是空格的数量是根据它之前的字符数变化的.这让我觉得它不易用常规语言表现出来.

我怎样才能避免像这样强行:

([A-Za-z]{1}[0-9]{1}[ ]{4}|
[A-Za-z]{2}[0-9]{1}[ ]{3}|
[A-Za-z]{3}[0-9]{1}[ ]{2}|
[A-Za-z]{4}[0-9]{1}[ ]{1}|
[A-Za-z]{1}[ ]{5}|
[A-Za-z]{2}[ ]{4}|
[A-Za-z]{3}[ ]{3}|
[A-Za-z]{4}[ ]{2}|
[A-Za-z]{5}[ ]{1})
Run Code Online (Sandbox Code Playgroud)

以下是一些示例选项符号(请记住,忽略前6个字符以外的所有内容):

F     123456P12345678
CMG   123456P12345678
AAPL  123456P12345678
GOOG1 123456C12345678
F5    123456C12345678
Run Code Online (Sandbox Code Playgroud)

Tim*_*ker 6

您可以使用lookbehind断言:

^[A-Za-z]{1,4}\d? +\b(?<=^.{6})
Run Code Online (Sandbox Code Playgroud)

说明:

^:匹配行或字符串(取决于你是否设置的选项开始RegexOptions.Multiline与否).

[A-Za-z]{1,4}\d? +:匹配1至4个字母字符和一个可选的数字,随后通过至少一个空间

\b:断言,我们现在正处在一个字边界(即,下一个字符是字母数字)

(?<=^.{6}):断言上面的匹配正好是六个字符长.