首页 > 解决方案 > 正则表达式匹配具有相同模式的所有文件?

问题描述

需要编写一个正则表达式来匹配所有具有以下名称的文件:

ABCD^^A12397_4^^A12397_5^^ABCServer2^^1^^20190117654345
ABCDE^^A12394567_4^^A165557_5^^ABCServer5^^3^^20180117654345

基本上需要匹配模式,如:

Alphabets^^AlphaNumericWithSpecialChracter^^ANWSC^^ANWSC^^Numeric^^Numeric

我尝试过的事情:

Regex.IsMatch("ABCD^^A12397_4^^A12397_5^^Server2^^1^^20190117654345", "^ABCD\\^\\^A12397_4\\^\\^A12397_5\\^\\^Server2\\^\\^1\\^\\^20190117654345$");

谢谢 。

标签: c#regex

解决方案


让我们一步一步构建正则表达式:

Alphabets^^AlphaNumericWithSpecialChracter^^ANWSC^^ANWSC^^Numeric^^Numeric

假设

Alphabets                       - One or more A..Z or a..z letters          - [A-Za-z]+
AlphaNumericWithSpecialChracter - One or more A..Z, a..z, 0..9 letters or _ - [A-Za-z0-9_]+
ANWSC                           - One or more A..Z, a..z, 0..9 letters      - [A-Za-z0-9]+
Numeric                         - One or more 0..9 letters                  - [0-9]+

现在我们应该以^anchor 开始模式,以$one 结束并将块与\^\^(请注意,escapement:我们想要^作为普通字符,而不是作为anchor):

string pattern = 
  @"^[A-Za-z]+\^\^[A-Za-z0-9_]+\^\^[A-Za-z0-9]+\^\^[A-Za-z0-9]+\^\^[0-9]+\^\^[0-9]+$";

或者如果我们想增加可读性,我们可以把它写成

string pattern = string.Join(@"\^\^", 
  "^" +             // String start
  "[A-Za-z]+",      // Alphabets
  "[A-Za-z0-9_]+",  // AlphaNumericWithSpecialChracter
  "[A-Za-z0-9]+",   // ANWSC 
  "[A-Za-z0-9]+",   // ANWSC 
  "[0-9]+",         // Numeric
  "[0-9]+" +        // Numeric 
  "$");             // End of string

推荐阅读