The cross-referencing commands of the cleveref
package -- specifically, \cref
and \crefrange
-- may be your friend. Note that in the solution shown below, there are no parentheses around the cross-referenced items. I don't believe that these parentheses are either necessary or helpful.

The \crefrange
command, which takes two arguments, is designed for cross-references to a contiguous range of items. The \cref
command takes one argument, a comma-separated list of labels. The \cref
command automatically sorts the contents of its argument; it's not necessary to enter them in ascending order.
Optionally, you could load the hyperref
package. Doing so will make the cross-references generated by \cref
and \crefrange
into hyperlinks to the associated "targets". If you load the hyperref
package, be sure to load it immediately before cleveref
. Basically, hyperref
and cleveref
should be the last two packages loaded in the preamble.
\documentclass{article}
\usepackage[inline]{enumitem}
\usepackage[colorlinks]{hyperref} % optional
\prepackage{cleveref}
\crefname{enumi}{example}{examples}
\newcommand{\crefrangeconjunction}{--}
\newcommand{\creflastconjunction}{, and } % optional, for "Oxford comma"
\begin{document}
\begin{enumerate}
\item \begin{enumerate*} % inline list saves space
\item One \label{ex1} \item Two \label{ex2} \item Three \label{ex3}
\item Four \label{ex4} \item Five \label{ex5} \item Six \label{ex6}
\item Seven \label{ex7} \item Eight \label{ex8} \item Nine \label{ex9}
\end{enumerate*}
\end{enumerate}
We can see in \crefrange{ex1}{ex5} that \dots
We can see in \cref{ex9,ex3,ex7,ex5,ex6,ex1,ex2} that \dots
\end{document}
Addendum: The cleveref
package provides some very powerful utility macros. For instance, as explained in section of package's user guide, one can strip the common prefix -- here, "1" -- from ranges of cross-references.

\documentclass{article}
\usepackage[inline]{enumitem}
\usepackage[colorlinks]{hyperref}
\usepackage{cleveref}
\crefname{enumi}{example}{examples}
%\newcommand{\crefrangeconjunction}{--}
\newcommand{\creflastconjunction}{, and } % optional, for "Oxford comma"
\crefrangelabelformat{enumi}{#3#1#4--#5\crefstripprefix{#1}{#2}#6}
\begin{document}
\begin{enumerate}
\item \begin{enumerate*} % inline list saves space
\item One \label{ex1} \item Two \label{ex2} \item Three \label{ex3}
\item Four \label{ex4} \item Five \label{ex5} \item Six \label{ex6}
\item Seven \label{ex7} \item Eight \label{ex8} \item Nine \label{ex9}
\end{enumerate*}
\end{enumerate}
We can see in \crefrange{ex1}{ex5} that \dots
We can see in \cref{ex9,ex3,ex7,ex5,ex6,ex1,ex2} that \dots
\end{document}
(1a-c,e-f,i)
or(1a-c,1e-f,1i)
, or(1a-c), (1e-f), (1i)
or ... ? What about mixed labels like(1a-c,2e-f)
...?1a-c, 1e-g, and 1i
rather than just1a-c, 1e-f, 1i
?\ref{label}
) manually. If there's an easier way to do it in a way that I have to add the parentheses manually, that's fine. And I'd like the "and" prior to the last item. But if I can find a way to call, for example,1a-c
, I would be happy just repeating the command for the rest of the items, e.g. (\ref{label_a-c}, \ref{label_e-f}, \ref{label{i}
)