正则表达式将字符串分解为float / alpha部分

时间:2017-04-21 04:46:08

标签: c# regex

我正在尝试将double[M|B]与双部分和alpha部分匹配。例如,47.5B350M

这不起作用:

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;

2 个答案:

答案 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

在这里演示:

Rextester

答案 1 :(得分:1)

你的正则表达式包含几个问题:

  • Named capturing groups(?<Name>pattern)语法
  • 组成
  • A&#34; wild&#34; :符号存在
  • 您的号码正则表达式也匹配单个.

我建议通过以下方式修复它(请参阅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]