对于以下两行,我需要相同的正则表达式。
PieceID = NEW00000009
piece_id="NEW00000009"
找到我的模式:
[pP]iece[_]*[iI][dD][" "]*=[" "]*["]*(?<PieceID>[A-Z0-9]["]*{11})"
答案 0 :(得分:1)
你离好的模式不远,但你需要做几点澄清:
?
(表示{0,1}
)而不是*
(这意味着{0,}
)。您的模式可以这样写:
[pP]iece_?[iI][dD] *= *"?(?<PieceID>[A-Z0-9]{11})"?
您可以更加严谨,避免匹配piece_id=NEW00000009"
:
[pP]iece_?[iI][dD] *= *("?)(?<PieceID>[A-Z0-9]{11})\\1
可选引用在第1组中捕获,\\1
是第1组的反向引用
要完成,如果用\\s*
替换空格(\\s
是任何空格的字符类)或[^\\S\\r\\n]*
只允许水平空格,则可以使其更灵活
答案 1 :(得分:0)
你需要担心这种情况下的区分大小写,但我认为它会做你想要做的事情。
var s1 = "PieceID = NEW00000009";
var s2 = @"piece_id=""NEW00000009""";
var re = new Regex(@"^(PieceID|piece_id)\s*=\s*\""?(?<PieceID>[A-Z0-9]{11})\""?$");
Console.WriteLine(re.IsMatch(s1));
Console.WriteLine(re.IsMatch(s2));
输出:
True
True