簡體   English   中英

需要幫助制定正則表達式來解析數據

[英]Need help formulating regular expression to parse data

基本上,

我有要從一塊文本中吐出的文本。 我大部分時候都使用了正則表達式,它要么太小[跳過一部分],要么太過太多[閱讀下一部分的一部分]。它基本上需要閱讀從銀行對帳單中提取的文本。我已經嘗試過繼續閱讀正則表達式,但是我仍然不知道該怎么做。

以下是一些示例,供您了解我正在嘗試做的事情。

_4XXXXXXXXXXXXXX9_
_SOU THE HOME DEPOT 431      POMPANO BEACH * FL
AUT  020112 DDA PURCHASE_
_2/1_DEBIT POS_3.15_

下划線基本上是我要提取的部分。 基本上除了DEBIT POS以外的所有東西。

我正在使用的正則表達式是:

\A
(?<SerialNumber>\b[0-9]{13,16}\b)
(?<Description>.) 'PROBLEM HERE'
(?<PostingDate>
(?:1[0-2]|[1-9])/(?:3[01]|[12][0-9]|[1-9]))
(?<Amount>[,0-9]+\.[0-9]{2})
\Z

我無法將Description設置為任何字符長度,因為我不知道文本部分的最大長度。 我也不知道這是2行描述還是1行。這主要是讓我感到困惑的地方。

我想您想將每四行首先連接在一起:

var file = @"C:\temp.txt";
var lines = System.IO.File.ReadAllLines(file);
var buffer = new List<String>();

for (var i = 0; i < lines.Length; i++ )
{
    if (i % 4 == 0) { buffer.Add(""); }
    buffer[buffer.Count - 1] += lines[i] + " ";
}

buffer.ForEach(b => Console.WriteLine(b));

然后,您實際上可以解析緩沖區中的每個條目,就好像它是一行一樣。 可以使用正則表達式或僅字符串Substrings輕松完成。 比跨行嘗試要容易得多。

上面的代碼不是最干凈的,但是可以工作。

好像不使用Regex的另一個簡單答案。 如果每行都是一行,那么File.ReadAllLines()並解析每一行並不難。

public class Order
{
  public string SerialNumber { get; set; }
  public string Description { get; set; }
  public DateTime PostingDate { get; set; }
  public Decimal Amount { get; set; }

  public void SetSerialNumberFromRaw(string serialNumber)
  {
    // Convert to required type, etc.
    this.SerialNumber = <someConvertedValue>;
  }
  public void <OtherNeededValueConverters>
}    

List<string> lines = File.ReadAlllines("<filename").ToList();
List<Order> orders = new List<Order>();

Order currentOrder = null;
foreach (string line in lines)
{
  if (currentOrder = null)
  {
    currentOrder = new Order();
    orders.Add(currentOrder);
    currentOrder.SetSerialNumberFromRaw(line);
  }
  else
  {
    if (line.Contains("DEBIT POS", CultureInfo.CurrentCultureIngoreCase))
    { 
      currentOrder.SetPostingDateAndAmount(line);
      currentOrder = null;
    }
    else
    {
      currentOrder.SetAppendDescription(line);
    }
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM