0

我正在尝试将正则表达式与我从 PDF 创建的文本文件中的日期匹配。当我在 Regexhero 中构建它时,Regex 匹配,但在调试时我发现 c# 根本找不到匹配项。

关于为什么会发生这种情况的任何想法?

如果有帮助,我可以提供一些代码,但是我所有的其他正则表达式都匹配,并且代码非常健壮,涉及许多不同的类、公共变量和函数。这需要一些时间才能变得可读。

(在 c# 控制台应用程序中使用 vs 2012 pro)(Regex 与 regexhero 确认)

正则表达式:
*?((一月|二月|三月|四月|五月|六月|七月|八月|九月|十月|十一月|十二月) *\d{1,2}, \d{4})\n. ?\n. *?乔治亚电力公司

文本文件片段:

                                                      Dec 26, 2012

GEORGIA POWER COMPANY
BIN #19999
21141 Ralph McGuiver Blvd.
Atlanta, GA 30308-3374




                         GI LANDING LLC
                         Customer***
                         PO BOX 1234
                         LOGAN UT 84323





                                                                                                                              Please Pay By                                Jan 10, 2013
                                                           Customer Name                                   Account Number     Total Due                                              $ 61.91
                                                           IV LANDING LLC                      19380-29341


             Service Address                                                                                 Service Period   Contact Us 24 hours a day, 7 days a week
             900 GI LANDING DR                                                        Nov 26, 2012 - Dec 25, 2012
             HSE A                                                                                                                      georgiapower.com
                                                                                                                                           Account Number             Web Access Code
             Billing Summary
                                                                                                                                           135130-530141              845089
             Previous Bill Amount                                                                                  $ 63.34                 Customer Service           Power Outage Reporting
             Payment Received On 12/06/12                                 Thank You!                                
4

3 回答 3

1

您的模式中有一些错误。首先,第一个字符“*”之前没有应用于任何字符,并导致正则表达式抛出异常。此外,该\n.?\n. *?段假定唯一的行分隔符是\n,而在我们的例子中也有\r字符。

您的正确模式应该大约是:

\s*?((Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{1,2},\s\d{4})[\r\n]*GEORGIA POWER COMPANY

但是,您可以对其进行调整以使其更具限制性。

如何使用它的示例:

var regex = new Regex(@"\s*?((Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{1,2},\s\d{4})[\r\n]*GEORGIA POWER COMPANY");
var input = @"your input here";
var match = regex.Match(input);
if (match.Success) { /*Operate*/ }
于 2013-01-04T05:02:22.797 回答
1

您使用的正则表达式不正确。我用Expresso检查了它。

以下正则表达式将匹配您需要的日期。可以从组DATE中提取日期。

(?<DATE>(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)?\s+\d{1,2},\s+\d{4})\s+GEORGIA POWER COMPANY
于 2013-01-04T05:05:44.207 回答
1

我找到了一个有效的。您的所有回复都在 Expresso 和 regexhero 中有效,但是,我的特定控制台应用程序出于某种原因只喜欢这个。感谢您的回复。

正确的正则表达式:"\s*((Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{1,2},\s\d{4} )\s*G"

于 2013-01-04T18:32:18.073 回答