如何改变正则表达式

本文关键字:正则表达式 改变 何改变 | 更新日期: 2023-09-27 18:01:35

我有一个正则表达式:

string DefaultInternalUseridPattern = "^(?i)((CEU)|(APA)|(NAM))''''(((ADM.){0,1}([a-z]{8}))|((SVC.){0,1}((CEU.)|(APA.)|(NAM.)|(HEI.))[a-z]*))$";

我想替换最后一部分:(CEU) | (APA) |(南)|(黑)

匹配3 Letter和.

我尝试了一些东西,但没有得到解决我的问题。

如何改变正则表达式

你的表达式被捕获组过载,我怀疑你是否在使用它们,建议删除那些多余的。这将简化对它的进一步操作。

请注意,模式中的文字点必须转义。

我还看到你使用的是常规字符串字面值,而在c#中使用逐字字符串字面值定义正则表达式模式要舒服得多。

@"^(?i)(CEU|APA|NAM)''((ADM'.)?([a-z]{8})|(SVC'.)?([A-Z]{3}'.)[a-z]*)$"
                                                   ^^^^^^^^^^ 

查看这里的演示,我将4个备选组更改为[A-Z]{3}'.

请注意,如果您只需要在那里匹配大写字母,则需要在(?-i:[A-Z]{3}'.)组中使用它们。

您可以删除所有不需要的捕获组,并使用这个

原料:^(?i)(?:CEU|APA|NAM)''(?:(?:ADM'.)?[a-z]{8}|(?:SVC'.)?[A-Z]{3}'.[a-z]*)$
[字]@"^(?i)(?:CEU|APA|NAM)''(?:(?:ADM'.)?[a-z]{8}|(?:SVC'.)?[A-Z]{3}'.[a-z]*)$"

扩大
 ^ 
 (?i)                      # Be careful here, this says case insensitive
                           # for all subsequent letter matching.
 (?: CEU | APA | NAM )
 '' 
 (?:
      (?: ADM '. )?
      [a-z]{8} 
   |  
      (?: SVC '. )?
      [A-Z]{3} '.
      [a-z]* 
 )
 $