繁体   English   中英

拆分一串数字和字符

[英]Split a string of Number and characters

我有一个列表liRoom,其中包含字母数字和字母字符串

List<string> liRoom = new List<string>() {"Room1","Room2","Room3",  
                                         "Room4","Hall","Room5","Assembly",  
                                         "Room6","Room7","Room8","Room9};

此列表的类型为字母数字和字母,因此我想从此字符串列表中获取最大数值。
我试过这样做

var ss = new Regex("(?<Alpha>[a-zA-Z]+)(?<Numeric>[0-9]+)");  
List<int> liNumeric = new List<int>();  
foreach (string st in liRoom)  
{   
var varMatch = ss.Match(st);  
liNumeric.Add(Convert.ToInt16(varMatch.Groups["Numeric"].Value));   
}  
int MaxValue = liNumeric.Max();// Result Must be 9 from above Example.

 List<int> liNumeric = new List<int>();  
 foreach (string st in liRoom)  
 {   
   liNumeric.Add( int.Parse(new string(st.Where(char.IsDigit).ToArray())));   
 }  
 int MaxValue = liNumeric.Max();// Result Must be 9 from above Example.

但是当stHall,Assembly时都显示错误
帮帮我怎么做

您的代码中出现异常的原因很少。 我为这些可能的例外情况添加了一些条件。

List<int> liNumeric = new List<int>();  
 foreach (string st in liRoom)  
 { 
   // int.Parse will fail if you don't have any digit in the input 
   if(st.Any(char.IsDigit))
   {
       liNumeric.Add(int.Parse(new string(st.Where(char.IsDigit).ToArray()))); 
   }

 }  
 if (liNumeric.Any()) //Max will fail if you don't have items in the liNumeric
 {
     int MaxValue = liNumeric.Max();
 }

请尝试以下方法:

List<string> liRoom = new List<string>() {"Room1","Room2","Room3",  
                                         "Room4","Hall","Room5","Assembly",  
                                         "Room6","Room7","Room8","Room9"};


var re = new Regex(@"\d+");

int max = liRoom.Select(_ => re.Match(_))
                .Where(_ => _.Success)
                .Max( _ => int.Parse(_.Value));

/* 
   max = 9 
*/

您应通过检查匹配是否成功,在代码中添加以下内容

if (varMatch.Success)
{
     liNumeric.Add(Convert.ToInt16(varMatch.Groups["Numeric"].Value));
}

您不需要foreach ,只需执行以下语句即可:

int value = liRoom.Where(x => x.Any(char.IsDigit))
            .Select(x => Convert.ToInt32(new String(x.Where(char.IsDigit).ToArray())))
            .Max();

看起来很奇怪,但是可以正常工作。 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM