【问题标题】:Split on numeric to letters excluding comma将数字拆分为不包括逗号的字母
【发布时间】:2017-09-11 12:04:27
【问题描述】:

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

“0”

","

“35”

“毫安”

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”

“毫安”

我如何做到这一点?

【问题讨论】:

  • 我相信您还需要学习一些关于正则表达式的知识,才能完成这个简单的任务。对于像这样的简单输入,整数部分和小数部分的简单组将能够捕获值,此时单元的组很简单:(?&lt;IntergerPart&gt;\d+)(\.|,)(?&lt;DecimalPart&gt;\d+)(?&lt;Unit&gt;\w+)(\d+)(\.|,)(\d+)(\w+) 没有命名组。
  • 但不清楚这种字符串可能很棘手我可以要求更大的输入面板吗?你总是有小数部分和小数分隔符吗?你处理 ^ 和 exposant 吗?你有时间吗?您是否验证数字后的每个单词都是一个单位

标签: c# regex split


【解决方案1】:

您似乎想将字符串标记为数字和其他所有内容。

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

因为你有, 作为小数分隔符,你可以使用

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

regex demo

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

.Where(x =&gt; !string.IsNullOrEmpty(x)) 是删除空项目(如果有的话)所必需的。

【讨论】:

    【解决方案2】:

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

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

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

    它应该可以工作。

    【讨论】:

      【解决方案3】:
       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 组毫安

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-14
        • 2017-08-24
        • 2018-12-28
        • 2018-04-14
        • 2021-02-24
        • 1970-01-01
        • 2022-11-29
        相关资源
        最近更新 更多