将数字拆分为不包括逗号的字母

时间:2017-09-11 12:04:27

标签: c# regex split

我有一个包含“0,35mA”的字符串我现在有下面的代码,它将“0,35mA”分成

“0”

“”

“35”

“MA”

List<string> splittedString = new List<string>();
foreach (string strItem in strList)
{
    splittedString.AddRange(Regex.Matches(strItem, @"\D+|\d+")
        .Cast<Match>()
        .Select(m => m.Value)
        .ToList());
}

我想要的是要分割成

的代码

“0,35”

“MA”

我如何实现这一目标?

3 个答案:

答案 0 :(得分:2)

看起来你想将字符串标记为数字和其他所有内容。

更好的正则表达式方法是使用数字匹配模式 split ,同时将整个模式包装到捕获组中,以便将匹配的部分放入生成的数组中。

由于您有,作为小数点分隔符,因此您可以使用

var results = Regex.Split(s, @"([-+]?[0-9]*,?[0-9]+(?:[eE][-+]?[0-9]+)?)")
        .Where(x => !string.IsNullOrEmpty(x))
        .ToList();

请参阅regex demo

enter image description here

正则表达式基于Matching Floating Point Numbers with a Regular Expression中描述的模式。

.Where(x => !string.IsNullOrEmpty(x))是摆脱空项目(如果有的话)所必需的。

答案 1 :(得分:0)

我假设您的所有字符串都具有相同的格式。

所以,试试这个正则表达式:

 string regex = "([\\d|,]{4})|[\\w]{2}";

它应该有用。

答案 2 :(得分:0)

 var st = "0,35mA";  

 var li = Regex.Matches(st, @"([,\d]+)([a-zA-z]+)").Cast<Match>().ToList();  

 foreach (var t in li)
 {
     Console.WriteLine($"Group 1 {t.Groups[1]}")
     Console.WriteLine($"Group 2 {t.Groups[2]}");
 }

第1组0,35

组2 mA