我有一个包含五个值的数组:
"-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 :(得分:1)
问题是\w
不包含/
。你可以加入你的正则表达式。
Regex regex = new Regex(@"([\-0-9\.\,0-90-9]+)(\s*)([°\w\/²]*)");
或更基本
Regex regex = new Regex(@"([\-0-9\.\,0-90-9]+)(\s*)([^""]*)");
答案 1 :(得分:0)
Regex regex = new Regex(@"([\-0-9\.\,0-90-9]+)(\s*)([°\w\/²])");
答案 2 :(得分:0)
除了其他答案,您还可以将正则表达式降低到:
Regex regex = new Regex(@"[-0-9.,]+\s*([°\w/²]*)");
答案 3 :(得分:0)
您拥有的正则表达式包含一个基本问题:您希望使用字符类匹配整数或浮点数。 [\-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);
}
}