正则表达式匹配文本,但c#找不到匹配项

时间:2013-01-04 04:43:59

标签: c# regex pattern-matching match

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

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

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

(在c#console应用程序中使用vs 2012 pro) (正则表达式与regexhero确认)

正则表达式:
 *?((Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec)* \ d {1,2}, \ d {4})\ n。< / em>的吗?\ n。 *?GEORGIA POWER COMPANY

文本文件摘要:

                                                      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!                                

3 个答案:

答案 0 :(得分: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*/ }

答案 1 :(得分: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

答案 2 :(得分:1)

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

正确的正则表达式: “\ S *((一月|二月|三月|四月|五月|六月|七月|八月|九月|十月|十一月|十二月)\ S \ d {1,2},\ S \ d {4})\ S * G“