我正在尝试将double[M|B]
与双部分和alpha部分匹配。例如,47.5B
或350M
。
这不起作用:
var numAlpha = new Regex("(<Numeric>^[0-9]*?:\\.[0-9]*)(<Alpha>[a-zA-Z]+)");
var match = numAlpha.Match("1.65B");
var number = match.Groups["Numeric"].Value;
var alpha = match.Groups["Alpha"].Value;
答案 0 :(得分:1)
尝试使用可以看到数字和非数字字符之间差异的外观进行拆分:
var items = Regex.Split("47.5B", "(?<=[^0-9.])(?=[0-9])|(?<=[0-9])(?=[^0-9.])");
Console.WriteLine(items[0]);
Console.WriteLine(items[1]);
<强>输出:强>
47.5
B
在这里演示:
答案 1 :(得分:1)
你的正则表达式包含几个问题:
(?<Name>pattern)
语法:
符号存在.
。我建议通过以下方式修复它(请参阅online demo):
var numAlpha = new Regex(@"(?<Numeric>[0-9]*\.?[0-9]+)(?<Alpha>[a-z]+)", RegexOptions.IgnoreCase);
var match = numAlpha.Match("1.65B");
if (match.Success)
{
var number = match.Groups["Numeric"].Value;
var alpha = match.Groups["Alpha"].Value;
Console.WriteLine("Number: {0}, Alpha: {1}", number, alpha); // DEMO!
// => Number: 1.65, Alpha: B
}
注意:
^
锚,在结尾添加$
- @"^(?<Numeric>[0-9]*\.?[0-9]+)(?<Alpha>[a-z]+)$"
RegexOptions.IgnoreCase
允许使用[a-z]
代替[a-zA-Z]
。