2013-01-04 140 views
0

我试图将正则表达式匹配到我从PDF创建的文本文件中的日期。当我在Regexhero中构建正则表达式时,正则表达式会匹配,但是当我发现c#根本找不到匹配项时就会发生错误。正则表达式匹配文本,但c#找不到匹配

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

我可以提供一些代码,如果这会有所帮助,但我所有的其他正则表达式匹配,代码非常强大,涉及许多不同的类,公共变量和函数。这将需要一些时间来使可读性。

(使用VS在C#控制台应用程序2012 PRO) (正则表达式证实regexhero)

正则表达式:
*((一月|二月|三月|四月|五月|六月|七月|八月| Sep | Oct | Nov | Dec)* \ 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!         

回答

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“

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*/ } 
+0

我的正则表达式应该在”*“之前包含一个”“。当把它粘贴到这里时,我想它会删除这个空间。然而,你的正则表达式好多了。但我仍然收到错误:“ArgumentOutOfRangeException未处理”..? – Milne

+0

它适用于我。我已经用我的帖子编辑了一个如何使用它的例子。 – Mir

+0

我最终使用了正则表达式背后的大部分逻辑。它最终陷入了“[\ r \ n] *”。 – Milne

1

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

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

(?<DATE>(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)?\s+\d{1,2},\s+\d{4})\s+GEORGIA POWER COMPANY