我有一个正则表达式:
string DefaultInternalUseridPattern = "^(?i)((CEU)|(APA)|(NAM))\\\\(((ADM.){0,1}([a-z]{8}))|((SVC.){0,1}((CEU.)|(APA.)|(NAM.)|(HEI.))[a-z]*))$";
我想替换最后一部分: (CEU)|(APA)|(NAM)|(HEI)
使用与3 Letter相匹配的内容,然后使用.
我尝试了一些东西,但没有得到我的问题的解决方案。
答案 0 :(得分:3)
您的表达式因捕获组而过载,我怀疑您是否正在使用它们并建议删除那些多余的表达式。这将简化任何进一步的操作。
请注意,必须转义模式中的文字点。
我也看到你正在使用常规字符串文字,而逐字字符串文字在C#中定义正则表达式模式要舒服得多。
尝试
@"^(?i)(CEU|APA|NAM)\\((ADM\.)?([a-z]{8})|(SVC\.)?([A-Z]{3}\.)[a-z]*)$"
^^^^^^^^^^
请参阅demo here,我将4个备用组更改为[A-Z]{3}\.
。
请注意,如果您只需要匹配大写字母,则需要在(?-i:[A-Z]{3}\.)
组中使用它们。
答案 1 :(得分:0)
您可以摆脱所有不需要的捕获组并使用此
原始:^(?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]*
)
$