Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将字符串拆分为浮点/alpha部分的正则表达式_C#_Regex - Fatal编程技术网

C# 将字符串拆分为浮点/alpha部分的正则表达式

C# 将字符串拆分为浮点/alpha部分的正则表达式,c#,regex,C#,Regex,我试图将double[M | B]匹配为double部分和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.Gr

我试图将
double[M | B]
匹配为double部分和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;
var numAlpha=new Regex((^[0-9]*?:\\\[0-9]*)([a-zA-Z]+);
var match=numAlpha.match(“1.65B”);
变量编号=匹配。组[“数值”]。值;
var alpha=匹配组[“alpha”]值;

尝试使用lookarounds进行拆分,它可以看到数字字符和非数字字符之间的差异:

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

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

  • (?模式)
    语法构成
  • 出现一个“wild”
    符号
  • 您的数字正则表达式也与单个
    匹配
我建议按以下方式进行修复(请参阅):

var numAlpha=new Regex(@“(?[0-9]*\.?[0-9]+)(?[a-z]+”,RegexOptions.IgnoreCase);
var match=numAlpha.match(“1.65B”);
如果(匹配成功)
{
变量编号=匹配。组[“数值”]。值;
var alpha=匹配组[“alpha”]值;
WriteLine(“Number:{0},Alpha:{1}”,Number,Alpha);//演示!
//=>数字:1.65,α:B
}
注:

  • 如果需要匹配整个字符串,请在开始处添加
    ^
    锚定,并在结束处添加
    $
    -
    @“^(?[0-9]*\.?[0-9]+)(?[a-z]+)$”
  • RegexOptions.IgnoreCase
    允许使用
    [a-z]
    而不是
    [a-zA-z]

首先:命名组的语法错误。第二:您的数字正则表达式将----its---:Try:这个正则表达式匹配
.3M
。应该吗?也许
\d+(\.\d+)
双精度模式做得更好。
.3
是一个有效的双精度模式,不是吗?看见这个表达式是一个缩短的(这里没有指数部分)变体。也许它是有效的-我不确定。这就是为什么我要它。但是OP可以决定使用什么模式。很好地解释了他所犯的错误。
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
}