gpt4 book ai didi

C# 正则表达式获取带十进制数的特定字符

转载 作者:行者123 更新时间:2023-11-30 15:20:37 24 4
gpt4 key购买 nike

我需要一个正则表达式,它返回具有最多 1 位的十进制数的特定字符

我有字符串文本

(AvgC20.1 > 980000) && (C1>C2) MaxC20 MinC20.14

应用正则表达式后得到如下结果

AvgC20, MaxC20, MinC20

这是我正在使用的正则表达式

(Avg|Max|Min)[OHLVC]\d+

它返回我想要的但不返回小数到一位

但我需要这样的结果

AvgC20.1, MaxC20, MinC20.1

最佳答案

添加一个可选的 (?:\.\d+)?匹配 1 次或 0 次出现的 .后跟一位或多位数字:

(?:Avg|Max|Min)[OHLVC]\d+(?:\.\d+)?
^^^^^^^^^^

参见 regex demo

enter image description here

(?:...)?是可选的 non-capturing group .由于 ?,它是可选的(=匹配一次或零次出现)量词(贪婪的,这就是为什么我提到一或零,而不是零或一)。非捕获组用于分组目的,无需在内存中为捕获的值创建缓冲区。我建议使用捕获组,因为最终结果应该等于整个匹配值,因此不需要跟踪和存储这些子值。

关于 .NET 中的非捕获组的注意事项:在 .NET 代码中,您实际上可以使用编号的捕获组并通过使用 RegexOptions.ExplicitCapture 使它们成为非捕获组。旗帜。然后,将仅为命名的捕获组(如 (?<gr1>...) )创建内存缓冲区。

图案细节:

  • (?:Avg|Max|Min) - Avg , MaxMin
  • [OHLVC] - 集合中的一个大写字母
  • \d+ - 一位或多位数字
  • (?:\.\d+)? - . 的可选序列后跟一位或多位数字。

旁注:最佳做法是禁止同一交替组的分支在同一位置匹配,并且 (?:Avg|Max|Min)最好写成 (?:Avg|M(?:ax|in)) .然而,对机器有益的东西对人眼来说就没那么好了,所以出于可读性的原因,我建议保持第一组不变。

C# demo (注意 RegexOptions.ExplicitCapture 是在内联 (?n) 选项的帮助下传递的):

var s = "(AvgC20.1 > 980000) && (C1>C2) MaxC20 MinC20.14";
var pattern = @"(?n)(Avg|Max|Min)[OHLVC]\d+(\.\d+)?";
var result = Regex.Matches(s, pattern)
.Cast<Match>()
.Select(p => p.Value)
.ToList();
foreach (var r in result) // Demo printing the results
Console.WriteLine(r);

关于C# 正则表达式获取带十进制数的特定字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39743723/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com