我需要为我公司的'选项符号'编写正则表达式,以便我们可以在我们的网站上验证这些符号。
选项符号由两部分组成:
Part1 Part2
_ _ _ _ _ _ | _ _ _ _ _ _ _ _ _
我可以为Part2编写正则表达式,因为它非常简单。
但是,第1部分(前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})
以下是一些示例选项符号(请记住,忽略前6个字符以外的所有内容):
F 123456P12345678
CMG 123456P12345678
AAPL 123456P12345678
GOOG1 123456C12345678
F5 123456C12345678
答案 0 :(得分:6)
您可以使用lookbehind断言:
^[A-Za-z]{1,4}\d? +\b(?<=^.{6})
<强>解释强>
^
:匹配行或字符串的开头(取决于您是否设置选项RegexOptions.Multiline
)。
[A-Za-z]{1,4}\d? +
:匹配1到4个字母字符和一个可选数字,后跟至少一个空格
\b
:断言我们现在处于单词边界(即下一个字符是字母数字)
(?<=^.{6})
:断言上面的匹配正好是六个字符。
答案 1 :(得分:0)
尝试以下方法:
[A-Za-z]{1,4}[0-9]{1}?\s*?
{1,4}
允许使用可变数量的字母数字,?
允许它是可选的,*
类似于{0,}
。
答案 2 :(得分:0)
将其作为2部分检查,第一部分是正则表达式,第二部分是与正则表达式匹配的长度。
即正则表达式的类似内容:
[:alpha:] {1,4} [:digit:]?[] {1,5}
检查匹配表达式的长度将确保它有效,因为如果单个部分无效,则正则表达式将不匹配。因此,如果每个部分(字母,数字和空格)有效且长度为6,那么您将获得有效匹配。