我需要为我公司的'选项符号'编写正则表达式,以便我们可以在我们的网站上验证这些符号.
选项符号由两部分组成:
Part1 Part2
_ _ _ _ _ _ | _ _ _ _ _ _ _ _ _
Run Code Online (Sandbox Code Playgroud)
我可以为Part2编写正则表达式,因为它非常简单.
但是,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)
您可以使用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}):断言上面的匹配正好是六个字符长.