从下面的数据中,我需要从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;