2011-12-07 53 views
1

我想匹配190以下〜分隔的文本文件正則表達式C#爲〜分隔的文本文件

GPSE~21~ADVANCED PAVING~P.O. BOX 12847~Ogden~UT~84201~190~12/5/2008~OVER 60~2/3/2009~112458~12/5/2008~12/5/2008~5176~WESTERN GAS PROCESSOR, GRANGER~MOUNTAIN GAS PLANT~GRANGER~WY~82934~7533~TESORO REFINING~474 WEST 900 NORTH~SALT LAKE CITY~UT~841031494~BUT~Freight~5000~0.0577~288.5~360.63 
GPSE~21~ADVANCED PAVING~P.O. BOX 12847~Ogden~UT~84201~190~12/5/2008~OVER 60~2/3/2009~~12/5/2008~12/5/2008~~~~~~~~~~~~~~FUEL SURCHARGE~288.5~0.25~72.13~360.63 

基本上有2線,我wantto使用正則表達式匹配「190」號碼190。我是新的正則表達式,我不知道我怎麼能匹配這個。任何人都可以幫我創建一個正則表達式來匹配兩行中的「190」。謝謝。

回答

0

由於您基本上只需要獲取第8個字段,您根本不需要正則表達式。

這個小片段應該做的伎倆(很好地包裹着,便於使用的方法 - 我甚至做了錯誤處理部分你):

public string GetInvoiceNumber(string line) 
{ 
    if(line == null) 
    { 
     throw new ArgumentNullException("line"); 
    } 

    var res = line.Split('~'); 

    if(res.Length < 8) 
    { 
     throw new ArgumentException("The given line of text does not contain an invoice number!", "line"); 
    } 

    return res[7]; 
} 
+0

這是很長時間了..謝謝反正..我不知道如何關閉這個。 – user1086046

+0

只需點擊該特定帖子左側的標記圖標,即可將其中一個答案標記爲正確。我反正會發布這個,因爲考慮到回答這個問題與_answering_ it之間的區別,其他答案是可怕的); – Nuffin

0

一個正則表達式匹配「190」之間的符號506A是:

/~190~/ 

如果你想在第八場匹配你的〜分隔的文件,各執〜,然後採取第八場。在Perl中,例如:

my @fields = split /~/, $string; 
my $wanted = $fields[7]; 

您的問題對於您實際正在嘗試做什麼而言相當模糊。

+0

我想在這兩個線匹配190。 190實際上是一個發票號碼值。它可以在每行中改變,就像它可以是一個字符串值,如「EA123」或193或186或其他類似的東西。所以基本上你說我需要罰第8場。 – user1086046

0

編輯:Ops!現在我意識到你想在C#中使用正則表達式。在這種情況下省略此消息。

帶有'Perl'正則表達式的解決方案。它匹配除'〜'後面跟着'〜'的任何字符。這個過程七次。之後,它會選擇所有字符,直到找到第一個'〜'(這將是您文件的第八個字段)。圓括號將該內容保存在變量「$ 1」中。

/(?:[^~]*~){7}([^~]*)/ 

測試

內容

script.pl

use warnings; 
use strict; 

while (<DATA>) { 
     print qq[$1\n] if m/(?:[^~]*~){7}([^~]*)/; 
} 

__DATA__                                                          
GPSE~21~ADVANCED PAVING~P.O. BOX 12847~Ogden~UT~84201~190~12/5/2008~OVER 60~2/3/2009~112458~12/5/2008~12/5/2008~5176~WESTERN GAS PROCESSOR, GRANGER~MOUNTAIN GAS PLANT~GRANGER~WY~82934~7533~TESORO REFINING~474 WEST 900 NORTH~SALT LAKE CITY~UT~841031494~BUT~Freight~5000~0.0577~288.5~360.63                                               
GPSE~21~ADVANCED PAVING~P.O. BOX 12847~Ogden~UT~84201~190~12/5/2008~OVER 60~2/3/2009~~12/5/2008~12/5/2008~~~~~~~~~~~~~~FUEL SURCHARGE~288.5~0.25~72.13~360.63 

運行腳本:

perl script.pl 

而且結果:

190 
190 
+0

謝謝但/(?:[^〜] *〜){7}([^〜] *)/返回了多個匹配的單詞。 – user1086046

+0

刪除'/'s,你可以在C#中使用它。 – Joey