gpt4 book ai didi

C# : Improved my failing regex

转载 作者:太空宇宙 更新时间:2023-11-03 12:56:22 25 4
gpt4 key购买 nike

我有一个包含五个值的数组:

    "-360°"
"0 x"
"1r"
"0,01 m/s"
"0,01 m/s²"

我想提取所有与单位相关的字符串。

我有这个正则表达式:

    Regex regex = new Regex(@"([\-0-9\.\,0-90-9]+)(\s*)([°\w])");

但是对于 m/s 和 m/s²,我无法提取它们。

你能帮帮我吗?

问候

最佳答案

您的正则表达式包含一个基本问题:您想使用字符类匹配整数或 float 。 [\-0-9\.\,0-90-9] 匹配 1 个字符,-, 0-9, ., 1 次或多次。你真的只需要 (-?\d*,?\d+) 来匹配这样的数字。

由于需要匹配上标或下标字符,可以使用对应范围[\u2070-\u209F\u00B9\u00B2\u00B3](source)。

这是一个更新的正则表达式,可以匹配⁰、¹、²、³、⁴、⁵、⁶、⁷、⁸、⁹、ⁿ等。

(-?\d*,?\d+)(\s*)([°\w](?:/[\w\u2070-\u209F\u00B9\u00B2\u00B3]+)?)

参见 regex demo

这是一个C# demo :

var lines = new string[] {"-360°", "0 x", "1r", "0,01 m/s", "0,01 m/s²"};
foreach (var s in lines)
{
var matches = Regex.Matches(s, @"(-?\d*,?\d+)(\s*)([°\w](?:/[\w\u2070-\u209F\u00B9\u00B2\u00B3]+)?)");
foreach (Match m in matches) {
Console.WriteLine("Match:" + m.Value);
Console.WriteLine("Group[1]: " + m.Groups[1].Value);
Console.WriteLine("Group[2]: " + m.Groups[2].Value);
Console.WriteLine("Group[3]: " + m.Groups[3].Value);
}
}

关于C# : Improved my failing regex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33690606/

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