Skip to main content
 首页 » 编程设计

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

2024年01月29日28jpfss

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

一个期权品种由两部分组成:

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}) : 断言上面的匹配正好是六个字符长。