这是我之前的问题的延续.NET 正则表达式引擎没有返回匹配项,但我期待 8。
我的查询完美地处理了所有事情,并且我的捕获组运行良好,但是我发现了一个我不知道如何处理的边缘情况。
这是一个我遇到问题的测试用例。
INSERT INTO [Example] ( [CaseNumber] , [TestText] )
VALUES
(1 , 'Single Line Case'),
(2 , 'Multi
Line Case');
(3 , 'Two Lines with odd end '');
Case');
(4 , ''),
(5 , 'Case 3 is the Empty Text Case');
这是我正在使用的模式,我使用 RegexOptions 标志Singleline
、、、和Multiline
ExplicitCapture
IgnorePatternWhitespace
^\(
((('(?<s>.*?)'(?!')) |
(?<n>-?[\d\.]+)
)(\s,\s)?
)+
#(?<!'') #Commented Case 3 works, un-commented case 2 works
\)[;,]\r?$
我可以处理案例 3 或案例 4,但我无法同时处理这两种情况。
如果我有办法检查捕获组中是否有偶数个'
's`,我可以检查我们是否在真正的行尾或文本块中,该行的结尾只是恰好匹配模式。但我不知道如何修改其他示例以处理多个行文本字符串。
我想用一个正则表达式查询来完成还是我被迫进行后处理(使用注释的案例)并且这是两次通过?
这是在 LINQPad 中运行它的代码
string text =
@"INSERT INTO [Example] ( [CaseNumber] , [TestText] )
VALUES
(1 , 'Single Line Case'),
(2 , 'Multi
Line Case');
(3 , 'Two Lines with odd end '');
Case');
(4 , ''),
(5 , 'Case 3 is the Empty Text Case');
";
const string recordRegex =
@"^\(
((('(?<s>.*?)'(?!')) |
(?<n>-?[\d\.]+)
)(\s,\s)?
)+
#(?<!'') #Commented Case 3 works, un-commented case 2 works
\)[;,]\r?$";
var records = Regex.Matches(text, recordRegex, RegexOptions.Singleline | RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace | RegexOptions.ExplicitCapture);
records.Dump();