0

PDFから作成したテキストファイルの日付に正規表現を一致させようとしています。Regexheroでビルドすると、Regexは一致しますが、デバッグを行うと、c#が一致するものをまったく見つけられないことがわかりました。

なぜこれが起こるのかについて何か考えはありますか?

それが役立つ場合はいくつかのコードを提供できますが、他のすべての正規表現は一致しており、コードは非常に堅牢で、多くの異なるクラス、パブリック変数、および関数が含まれています。読みやすくなるまでには少し時間がかかります。

(c#コンソールアプリケーションでvs 2012 proを使用)(正規表現はregexheroで確認済み)

正規表現:
*?((1月|2月|3月|4月|5月|6月|7月|8月|9月|10月|11月|12月)* \ 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 に答える