正则表达式可以从字符串中提取多个数字吗?

时间:2014-09-03 17:57:06

标签: c# .net regex

我们说我有一个字符串:

  

SORT_123_456

有没有一种简单的方法来解析这两个整数值?我不知道这些值会有多少位数。如果我可以验证其他字符并放弃解析,如果它们不像我上面那样出现(这表明出现了问题),也会有所帮助。

我知道我可以逐个字符地解析,但我想知道Regex是否可以解决这个问题。

我还没有真正使用正则表达式。有人可以告诉我,如果可以使用Regex更轻松地完成此操作吗?

3 个答案:

答案 0 :(得分:6)

SORT_(\d+)_(\d+)会这样做。在使用正则表达式后,只需提取两组。

如果SORT被另一个单词重新播放,那么\w+_(\d+)_(\d+)将会执行此操作,如果它完全丢失,(\d+)_(\d+)将是正则表达式,最后,如果该单词必须在Caps中:{ {1}}。

答案 1 :(得分:2)

如果你想要一个使用Split()功能的例子,你可以做什么

var splitStr = "SORT_123_456";
var sortable = splitStr.Split('_');
if (sortable[0].Contains("SORT"))
{
    //do your sorting logic because you have a sortable 
    sortable[1] //will be "123"
    sortable[2] //will be "456"
}

或者您可以检查string.Empty

var splitStr = "SORT_123_456";
var sortable = splitStr.Split('_');
if (!sortable[0] == string.Empty)
{
    //do your sorting logic because you have a sortable 
    sortable[1] //will be "123"
    sortable[2] //will be "456"
}

答案 2 :(得分:1)

这是一种简单的方法。一个简单的正则表达式它验证源字符串提取并捕获所有数字字段,无论找到多少这样的字段:

string src = @"SORT_123_456_789" ;
Regex  rx = new Regex( @"^SORT(_\d+)*$" ) ;
Match  match = rx.Match( src ) ;

if ( !match.Success ) throw new InvalidOperationException() ;

int[] values = null ;
if ( match.Success )
{
  values = match
          .Groups[1]
          .Captures
          .Cast<Capture>()
          .Select( c => int.Parse( c.Value.Substring(1) ) )
          .ToArray()
          ;
}