C#:改进了我失败的正则表达式
本文关键字:失败 正则表达式 | 更新日期: 2023-09-27 18:21:56
我有一个有五个值的数组:
"-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²,我无法提取它们。
你能帮我吗?
问候
您的正则表达式包含一个基本问题:您希望使用字符类匹配整数或浮点数。['-0-9'.',0-90-9]
匹配1个字符,-
、0-9
、.
或,
1次或多次。你真的只需要(-?'d*,?'d+)
来匹配这样一个数字。
由于需要匹配上标或下标字符,因此可以使用相应的范围['u2070-'u209F'u00B9'u00B2'u00B3]
(源)。
下面是一个更新的正则表达式,可以匹配⁰,cco,²,³,⁴, ⁵, ⁶, ⁷, ⁸, ⁹, ⁿ,等
(-?'d*,?'d+)('s*)([°'w](?:/['w'u2070-'u209F'u00B9'u00B2'u00B3]+)?)
查看regex演示
这是一个C#演示:
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);
}
}
问题是'w
不包括/
。您可以将/包含在您的正则表达式中。
Regex regex = new Regex(@"(['-0-9'.',0-90-9]+)('s*)([°'w'/²]*)");
或者更基本上是
Regex regex = new Regex(@"(['-0-9'.',0-90-9]+)('s*)([^""]*)");
Regex regex = new Regex(@"(['-0-9'.',0-90-9]+)('s*)([°'w'/²])");
除了其他答案外,您还可以将正则表达式简化为:
Regex regex = new Regex(@"[-0-9.,]+'s*([°'w/²]*)");