我需要为我的公司编写一个“选项符号”的正则表达式,以便我们可以在我们的网站上验证这些符号。
一个期权品种由两部分组成:
Part1 Part2
_ _ _ _ _ _ | _ _ _ _ _ _ _ _ _
我可以为第 2 部分编写一个正则表达式,因为它相当简单。
但是,第 1 部分(前 6 个字符位置)可能有点复杂。
归结为:
- 第 1 部分的总长度必须为 {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})
以下是一些示例选项符号(请记住,忽略前 6 个字符以外的所有内容):
F 123456P12345678
CMG 123456P12345678
AAPL 123456P12345678
GOOG1 123456C12345678
F5 123456C12345678
请您参考如下方法:
您可以使用回顾断言:
^[A-Za-z]{1,4}\d? +\b(?<=^.{6})
解释:
^ : 匹配行或字符串的开头(取决于您是否设置了 RegexOptions.Multiline 选项)。
[A-Za-z]{1,4}\d? + : 匹配 1 到 4 个字母字符和一个可选数字,后跟至少一个空格
\b : 断言我们现在处于单词边界(即下一个字符是字母数字)
(?<=^.{6}) : 断言上面的匹配正好是六个字符长。
