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

C# 正则表达式可以从字符串中提取多个数字吗?,c#,.net,regex,C#,.net,Regex,假设我有一个字符串,比如: 分类号为123-456 有没有一种简单的方法来解析这两个整数值?我不知道这些值有多少位数。如果我可以验证其他字符,如果它们没有像上面显示的那样显示,那么就放弃解析,这也会很有帮助,因为这将表明某些地方出了问题 我知道我可以逐个字符解析,但我想知道正则表达式是否可以处理这个问题 我只是没有真正使用正则表达式。有人能告诉我使用正则表达式是否可以更轻松地完成这项工作吗?SORT\ud+\ud+可以。只需在使用正则表达式后提取这两个组 如果SORT被另一个单词替换,则\w+\

假设我有一个字符串,比如:

分类号为123-456

有没有一种简单的方法来解析这两个整数值?我不知道这些值有多少位数。如果我可以验证其他字符,如果它们没有像上面显示的那样显示,那么就放弃解析,这也会很有帮助,因为这将表明某些地方出了问题

我知道我可以逐个字符解析,但我想知道正则表达式是否可以处理这个问题

我只是没有真正使用正则表达式。有人能告诉我使用正则表达式是否可以更轻松地完成这项工作吗?

SORT\ud+\ud+可以。只需在使用正则表达式后提取这两个组

如果SORT被另一个单词替换,则\w+\ud+\ud+将执行此操作,如果它完全丢失,\d+\ud+将是正则表达式,最后,如果单词必须大写:[A-Z]+\ud+\d+。

SORT\ud+\ud+将执行此操作。只需在使用正则表达式后提取这两个组


如果SORT由另一个单词替换,则\w+\ud+\ud+将执行此操作,如果完全缺少,则\d+\ud+将是正则表达式,最后,如果单词必须大写:[A-Z]+\ud+\ud+。

如果需要使用拆分函数的示例,您可以在此处执行此操作

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"
}
或者您可以检查字符串。空

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"
}

如果你想要一个使用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"
}
或者您可以检查字符串。空

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"
}

这是最简单的方法。一个简单的正则表达式。它验证源字符串并提取和捕获所有数字字段,而不管找到的此类字段的数量:

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()
          ;
}

这是最简单的方法。一个简单的正则表达式。它验证源字符串并提取和捕获所有数字字段,而不管找到的此类字段的数量:

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()
          ;
}


它们总是用uu分隔吗?是的,就像我上面说的一样,除了确切的数字。如果它不是u分隔的,那么我就放弃解析,因为可能会出现严重错误。您可以使用split函数,然后检查数组中是否有3个元素,如果string[0]=那么您知道单词SORT u是missing@DJKRAZE:是的,这也是一个非常简单的方法。我也发布了一个使用Split函数的示例,这样如果您不太熟悉使用regex,您也可以引用或尝试它们是否总是以uuu分隔?是的,除了精确的数字之外,与上面的方法一样。如果它不是u分隔的,那么我就放弃解析,因为可能会出现严重错误。您可以使用split函数,然后检查数组中是否有3个元素,如果string[0]=那么您知道单词SORT u是missing@DJKRAZE:是的,这也是一个非常简单的方法。我也发布了一个使用Split函数的示例,这样您也可以参考或尝试,如果您不太熟悉使用RegExI,我会尝试。如果在这种情况下缺少SORT,会发生什么?他想要一个通用的解决方案,使用正则表达式来获取字符串中的数字。如果缺少SORT,我希望它失败,因为这意味着有些事情不符合预期。@JonathanWood然后第一个正则表达式会这样做,如果这不是SORT,它将完全不匹配:我会试试。如果在这种情况下缺少SORT,会发生什么?他想要一个通用的解决方案,使用正则表达式获取字符串中的数字。如果缺少SORT,我希望它失败,因为这意味着有些事情不符合预期。@JonathanWood然后第一个正则表达式会这样做,如果这不是SORT,它将根本不匹配:事实上,这就是我最后所做的,因为它看起来更简单,可能更有效。我将Carlier Robin的帖子标记为答案,只是因为它更准确地回答了我最初的问题。完全可以理解,我只是为你提供了一种不同的方法,因此我们说了很多种剥猫皮的方法+1我完全赞成在像这样的琐碎模式中使用substr/indexof解决方案。事实上,这就是我最终所做的,因为它看起来更简单,可能更有效。我将Carlier Robin的帖子标记为答案,只是因为它更准确地回答了我最初的问题。完全可以理解,我只是为你提供了一种不同的方法,因此我们说了很多种剥猫皮的方法+1我完全赞成在像这样的琐碎模式中使用substr/indexof解决方案。