用于~分隔文本文件的c#正则表达式

本文关键字:正则表达式 文件 文本 分隔 用于 | 更新日期: 2023-09-27 18:16:59

我试图在以下~分隔的文本文件

中匹配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

基本上有2行,编号190。我想使用正则表达式来匹配"190"。我是新的正则表达式,我不知道我怎么能匹配这个。谁能帮助我创建一个正则表达式来匹配"190"在这两行。谢谢。

用于~分隔文本文件的c#正则表达式

由于您实际上只需要获得第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];
}

在~符号之间匹配"190"的正则表达式为:

/~190~/

如果您试图匹配以~分隔的文件中的第八个字段,请分割~,然后取第八个字段。在Perl中,例如:

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

你的问题是相当模糊的,你实际上想做什么。

EDIT:哎呀!现在我意识到你需要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