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

Regex 正则表达式获取字符串后的文本,regex,vb.net,Regex,Vb.net,我想得到一个字符串后的文本,这个字符串由一个字符串和一个数字组成。我有以下字符串: “付款前的一些文字和总金额:13214欧元签名:” 我想得到“EUR”,但只有“总付款:xxxxx”之后的EUR,因为我可以在其他地方的字符串中包含“xxxxx EUR” 我试过了 (?!<Total payment )(\d+) ([A-Z]){3,} (?!您可以将所需字符串的一部分捕获到捕获组中,同时匹配左侧而不捕获它: Dim my_rx As Regex = New Regex("Total p

我想得到一个字符串后的文本,这个字符串由一个字符串和一个数字组成。我有以下字符串:

“付款前的一些文字和总金额:13214欧元签名:”

我想得到“EUR”,但只有“总付款:xxxxx”之后的EUR,因为我可以在其他地方的字符串中包含“xxxxx EUR”

我试过了

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

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

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

详细信息

  • 总付款:
    -文字子字符串(仅匹配以确保上下文正确)
  • \s*
    -0+空格字符
  • \d+
    -1+位
  • \s*
    -0+空格字符
  • ([A-Z]{3,})
    -捕获组1(
    m.Groups(1).Value
    ):3个或更多大写ASCII字母
注意:您也可以使用命名的捕获组:
Total payment:\s*\d+\s*(?[a-Z]{3,})
,然后使用
m.groups(“货币”).value访问值


请参阅。

您需要使正则表达式不贪婪,这很容易。这应该是可行的

Total payment.*?EUR
在*之后添加?强制它只匹配第一个匹配的EUR。
它还将匹配之前的文字字符串。?和。?匹配文字字符串和第一个EUR实例之间的所有内容。

尝试@WiktorStribiżew我不想使用lookbehind是否始终有三个字符,例如EUR、USD或GBP等?@AndrewMorton是的,我只想获得currency@Rubyen对,在圣彼得堡的一个了望台艺术的模式不是最好的主意,我张贴了一个答案,其中有一个捕获组。是的,这是有点好,但我不想得到的numbers@Rubyen然后不要捕获它们。使用
“总付款:\s*\d+\s*([A-Z]{3,})”
。请参阅。