我正在尝试将正则表达式与我从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!
答案 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“