[英]Can Regex Extract Multiple Numbers from String?
假设我有一个类似的字符串:
SORT_123_456
有没有简单的方法来解析两个整数值? 我不知道这些值将有多少个数字。 如果我可以验证其他字符,并且如果它们没有像我上面显示的那样出现,则放弃分析,这也将有所帮助(这表明出现了问题)。
我知道我可以逐个字符地解析,但是我想知道Regex
是否可以处理这个问题。
我只是没有真正使用过正则表达式。 有人可以告诉我使用Regex
是否可以更轻松地完成此操作?
SORT_(\\d+)_(\\d+)
将执行此操作。 使用正则表达式后只需提取两组即可。
如果用另一个单词替换SORT,则\\w+_(\\d+)_(\\d+)
会这样做,如果完全丢失,则(\\d+)_(\\d+)
将是正则表达式,最后,如果单词必须大写: [AZ]+_(\\d+)_(\\d+)
。
如果您想要使用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"
}
这是简单的方法。 一个简单的正则表达式。 它会验证源字符串, 并提取和捕获所有数字字段,而与找到的此类字段的数量无关:
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()
;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.