我有一个包含“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”
我如何实现这一目标?
答案 0 :(得分:2)
看起来你想将字符串标记为数字和其他所有内容。
更好的正则表达式方法是使用数字匹配模式 split ,同时将整个模式包装到捕获组中,以便将匹配的部分放入生成的数组中。
由于您有,
作为小数点分隔符,因此您可以使用
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 => !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