Without a "real use" case it's difficult to do more than providing a set of macros that split the argument at the semicolon and remove the hyphens.
Here's a way with xparse and LaTeX3; it assumes that at most one semicolon is present in the argument:
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\somecommand}{>{\SplitArgument{1}{;}}m}
{ \somecommand_aux_i:nn #1 }
\cs_new:Nn \somecommand_aux_i:nn
{
\IfNoValueTF{#2}
{ \somecommand_aux_ii:nn {1}{#1} }
{ \somecommand_aux_ii:nn {1}{#1} \somecommand_aux_ii:nn {2}{#2} }
}
\cs_new:Nn \somecommand_aux_ii:nn
{
\tl_set:Nn \l_tmpa_tl {#2}
\tl_remove_all:Nn \l_tmpa_tl {-}
\tl_remove_all:Nn \l_tmpa_tl {~}
\somecommand_final:nx { #1 } { \l_tmpa_tl }
}
\cs_new:Nn \somecommand_final:nx
{ Integer~#1~is~#2 \par }
\ExplSyntaxOff
Now the input
\somecommand{1-2}
\somecommand{1-2; 3-5}
\somecommand{1-3-5}
will produce

It's just a matter of defining suitably \somecommand_final:nn
A different implementation using comma separated lists (and avoiding xparse), which assumes that no commas appear in the argument and allows for any number of semicolons:
\usepackage{expl3}
\ExplSyntaxOn
\clist_new:N \somecommand_clist
\cs_new:Npn \somecommand #1
{
\int_set:Nn \l_tmpa_int {0}
\tl_set:Nn \l_tmpa_tl {#1}
\tl_remove_all:Nn \l_tmpa_tl {-}
\tl_remove_all:Nn \l_tmpa_tl {~}
\tl_replace_all:Nnn \l_tmpa_tl {;} {,}
\clist_set:Nx \somecommand_clist { \l_tmpa_tl }
\clist_map_function:NN \somecommand_clist \somecommand_mapping:n
}
\cs_new:Nn \somecommand_mapping:n
{
\int_incr:N \l_tmpa_int
\somecommand_final:nn { \int_to_arabic:n {\l_tmpa_int } } { #1 }
}
\cs_new:Nn \somecommand_final:nn
{ Integer~#1~is~#2 \par}
\ExplSyntaxOff
Note that the \l_tmpa_int is just to provide indices to the various semicolon separated parts.
Explanation
Let's look at the second implementation in order to understand the steps.
(1) We allocate a "clist" variable (comma separated list)
\clist_new:N \somecommand_clist
(2) We define the main command, with one argument.
\cs_new:Npn \somecommand #1
{
\int_set:Nn \l_tmpa_int {0}
\tl_set:Nn \l_tmpa_tl {#1}
\tl_remove_all:Nn \l_tmpa_tl {-}
\tl_remove_all:Nn \l_tmpa_tl {~}
\tl_replace_all:Nnn \l_tmpa_tl {;} {,}
\clist_set:Nx \somecommand_clist { \l_tmpa_tl }
\clist_map_function:NN \somecommand_clist \somecommand_mapping:n
}
It first of all initializes the scratch integer variable \l_tmpa_int to zero and sets the scratch token list variable \l_tmpa_tl to the argument. Then we delete from its contents all hyphens and all spaces (~ is LaTeX3 way of denoting a space when \ExplSyntaxOn is in force); finally we change all semicolons into commas and convert the token list into a clist (this is actually redundant, but for the sake of using the right data types we behave as good boys). Finally we do \clist_map_function:NN. If the clist is
{a,b,c}
this is equivalent to perform
\somecommand_mapping:n {a}
\somecommand_mapping:n {b}
\somecommand_mapping:n {c}
(3) We must provide a meaning for the mapping function:
\cs_new:Nn \somecommand_mapping:n
{
\int_incr:N \l_tmpa_int
\somecommand_final:nn { \int_to_arabic:n {\l_tmpa_int } } { #1 }
}
Just increment the scratch integer variable and perform \somecommand_final:nn with first argument the integer converted in printable form and the current clist item.
(4) Here is the final command which does something with the arguments
\cs_new:Nn \somecommand_final:nn
{ Integer~#1~is~#2 \par}
Of course one is free to do whatever is required.
Another try (following Joseph Wright's suggestion)
Also this one works with any number of semicolons; we exploit the fact that \SplitList trims spaces on both sides; with an input such as \somecommand{1-2; 3-4} it will return #1 in the form {1-2}{3-4}:
\ExplSyntaxOn
\NewDocumentCommand{\somecommand}{>{\SplitList{;}}m}
{
\int_set:Nn \l_tmpa_int {0}
\tl_map_function:nN {#1} \somecommand_mapping:n
}
\cs_new:Nn \somecommand_mapping:n
{
\int_incr:N \l_tmpa_int
\tl_set:Nn \l_tmpa_tl {#1}
\tl_remove_all:Nn \l_tmpa_tl {-}
\somecommand_final:nn { \int_to_arabic:n {\l_tmpa_int} } { \l_tmpa_tl }
}
\cs_new:Nn \somecommand_final:nn
{ Integer~#1~is~#2 \par }
\ExplSyntaxOff
\sommecommandand what do you expect to get? – Roelof Spijker Dec 29 '11 at 20:27xstringprovides\StrSplitas well, that you're not using. – Werner Dec 29 '11 at 20:41