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]
.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
}