我想在字符串后面得到文本,该字符串由字符串和数字组成。我有以下字符串:
"之前的一些文字和付款总额:13214 EUR签名:"
我希望获得" EUR",但只有#34;总付款后的欧元:xxxxx",因为我可以获得" xxxxx EUR"在我的字符串中的其他地方。
我试过了
(?!<Total payment )(\d+) ([A-Z]){3,}
它会得到我想要的但是从出现的所有地方。 我看过其他问题,但这不是我想要的。
答案 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
<强>详情
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的第一个实例之间的所有内容。