在一个字符和未知数量的非数字字符之后提取一个值



从下面的数据中,我需要从RegEx中提取值数量,如下粗体所示。我在用https://regex101.com/测试一个值的表达式,但不能完全正确地得到它,RegEx可以实现这一点吗?我正在尝试提取%符号之后的值。

%d?.*

上面匹配了%之后的所有内容,但我只是在寻找值。

测试1 46.6500%$4463.82

测试2 36.5000%225215.72

您可以使用两种方法:

  • 使用捕获组,一旦找到匹配项,则获取组1值
  • 如果regex引擎支持可变宽度的lookbacking模式,则使用它来设置左侧上下文模式,该模式不会被"消耗",不会添加到匹配值中,但需要匹配该模式

第一种方法可以用实现

%D*(d(?:[.,d]*d)?)$
^-- cap. group --^

请参阅此regex演示。

第二种方法(基于查找的(正则表达式是

(?<=%D*)d(?:[.,d]*d)?$
^-  LB -^

请参阅此regex演示。

图案详细信息

  • (?<=%D*)-一个正向查找,需要在当前位置的左侧紧跟一个%,后面紧跟0个以上的非数字字符
  • %-一个%字符
  • D*-0个或多个非数字字符
  • (d(?:[.,d]*d)?)-第1组:
    • d-一位数字
    • (?:[.,d]*d)?-一个可选的非捕获组,匹配以下项中的一个或零个:
      • [.,d]*-0次或多次出现.,或数字
      • d-一位数字
  • $—字符串结束

由于您使用.NET,以下是C#代码片段,展示了如何使用两种方法提取第一次出现的内容:

var result1 = Regex.Match(str, @"%D*(d(?:[.,d]*d)?)$")?.Groups[1].Value;
var result2 = Regex.Match(str, @"(?<=%D*)d(?:[.,d]*d)?$")?.Value; 

相关内容

最新更新