用于〜分隔文本文件的正则表达式C#

时间:2011-12-07 16:24:08

标签: c# regex

我正在尝试在以下〜分隔文本文件中匹配190

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

基本上有两行数字190.我想使用正则表达式来匹配“190”。我是正则表达式的新手,我不知道我怎么能匹配这个。任何人都可以帮我创建一个正则表达式,以匹配两行中的“190”。感谢。

3 个答案:

答案 0 :(得分:0)

在〜符号之间匹配“190”的正则表达式将是:

/~190~/

如果您要尝试匹配〜分隔文件中的第八个字段,请在〜上拆分,然后取第八个字段。在Perl中,例如:

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

你的问题对于你真正想要做的事情是相当模糊的。

答案 1 :(得分:0)

编辑:行动!现在我意识到你想要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

答案 2 :(得分: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];
}