[英]Regular Expression for grok matching pattern
下面两行需要相同的Regex 。
PieceID = NEW00000009
piece_id="NEW00000009"
找到我的模式:
[pP]iece[_]*[iI][dD][" "]*=[" "]*["]*(?<PieceID>[A-Z0-9]["]*{11})"
您与良好模式相距不远,但是您需要进行一些澄清:
?
(表示{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]*
,则可以使其更加灵活-空间。
您需要担心此代码是否区分大小写,但我认为它会完成您要尝试执行的操作。
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.