我们说我有一个字符串:
SORT_123_456
有没有一种简单的方法来解析这两个整数值?我不知道这些值会有多少位数。如果我可以验证其他字符并放弃解析,如果它们不像我上面那样出现(这表明出现了问题),也会有所帮助。
我知道我可以逐个字符地解析,但我想知道Regex
是否可以解决这个问题。
我还没有真正使用正则表达式。有人可以告诉我,如果可以使用Regex
更轻松地完成此操作吗?
答案 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()
;
}