2013-01-04 145 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