正则表达式获取字符串的特定实例

时间:2018-08-28 20:46:52

标签: c# regex

我的行中包含可变数量的字符串,用空格分隔。

CRLF之前的最后两个值始终存在,我需要使用Regex提取倒数第​​二个数值。

我最初尝试使用(.+?[ ]{1,}){6}.+?\r\n,但是它可能是我需要提取的第5个或第6个实例。

66666666     RCA     JOBS               CASH      300,080.47 0000ABCDE\r\n

66666666     RCA     JOBS      182.09   VL          9,755.02 0000FGHIJ\r\n

2 个答案:

答案 0 :(得分:0)

您可以命名您的群组。这应该可以"(.+?[ ]{1,}){5}(?<MyFirstValue>.+?[ ]{1,})(?<MySecondValue>.*)

var regex = new Regex("(.+?[ ]{1,}){5}(?<MyFirstValue>.+?[ ]{1,})(?<MySecondValue>.*)");
var test = @"66666666     RCA     JOBS               CASH      300,080.47 0000ABCDE
66666666     RCA     JOBS      182.09   VL          9,755.02 0000FGHIJ";


Console.WriteLine(string.Join("\n", 
    regex
        .Matches(test)
        .Cast<Match>()
        .Select(m => m.Groups["MyFirstValue"].Value + " " + m.Groups["MySecondValue"].Value)));

Test it here

答案 1 :(得分:0)

如果需要倒数第二个字,则可以使用以下RegEx:

\S+(?= \S+\r$)

通过选择任何非空格字符,然后在其末尾加一个空格,一些非空格字符,“返回”来工作。

编辑:

您必须为RegEx设置multiline选项。 Edit2:

如果只想第一行,也可以使用:

\S+(?= \S+\r)

(没有'endofline')