正则表达式在字符串后获取文本

时间:2018-05-09 08:38:39

标签: regex vb.net

我想在字符串后面得到文本,该字符串由字符串和数字组成。我有以下字符串:

"之前的一些文字和付款总额:13214 EUR签名:"

我希望获得" EUR",但只有#34;总付款后的欧元:xxxxx",因为我可以获得" xxxxx EUR"在我的字符串中的其他地方。

我试过了

(?!<Total payment )(\d+) ([A-Z]){3,}

它会得到我想要的但是从出现的所有地方。 我看过其他问题,但这不是我想要的。

2 个答案:

答案 0 :(得分:2)

您可以将所需的字符串部分捕获到捕获组中,同时匹配左侧而不捕获它:

Dim my_rx As Regex = New Regex("Total payment:\s*\d+\s*([A-Z]{3,})")
Dim my_result As Match = my_rx.Match("Some text before and Total payment: 13214 EUR Signature:")
If my_result.Success Then
    Console.WriteLine(my_result.Groups(1).Value) ' => EUR
End If

请参阅VB.NET demo online

<强>详情

  • Total payment: - 文字子字符串(只是匹配以确保正确的上下文)
  • \s* - 0+空白字符
  • \d+ - 1+位数
  • \s* - 0+空白字符
  • ([A-Z]{3,}) - 捕获第1组(m.Groups(1).Value):3个或更多大写ASCII字母。

请注意,您还可以使用名为的捕获组:Total payment:\s*\d+\s*(?<currency>[A-Z]{3,}),然后使用m.Groups("currency").Value访问该值。

请参阅regex demo here

答案 1 :(得分:0)

很容易让你的正则表达式非贪婪。这应该工作

Total payment.*?EUR

添加?之后。*迫使它只匹配欧元的第一场比赛。 它也会匹配之前的文字字符串。?和。?匹配文字字符串和EUR的第一个实例之间的所有内容。