A pdflatex
solution with the listofitems
package.
REVISED ANSWER
I fear my original answer (below) misunderstood the context of when a "from" should be inserted. In this revision, "from" is applied when the range of a sequence spans across a page boundary.
\documentclass{article}
\usepackage{listofitems}
\newcommand\parsepages[1]{\bgroup%
\def\+{ and }%
\def\-{ to }%
\def\,{, line\checkplural{} }%
\setsepchar{+/-/,}%
\readlist*\mypages{#1}%
\foreachitem\i\in\mypages[]{%
\foreachitem\j\in\mypages[\icnt]{%
\foreachitem\k\in\mypages[\icnt,\jcnt]{%
\ifnum\kcnt<\listlen\mypages[\icnt,\jcnt]\relax\checkpages page \fi%
\k \ifnum\kcnt<\listlen\mypages[\icnt,\jcnt]\relax
\csname\mypagessep[\icnt,\jcnt,\kcnt]\endcsname \fi%
}\ifnum\jcnt<\listlen\mypages[\icnt]\relax%
\csname\mypagessep[\icnt,\jcnt]\endcsname\fi%
}\ifnum\icnt<\listlen\mypages[]\relax\csname\mypagessep[\icnt]\endcsname\fi%
}%
\egroup}
\newcommand\checkplural{\ifnum\numexpr\jcnt+1=\listlen\mypages[\icnt]\relax%
\ifnum\kcnt=\listlen\mypages[\icnt,\numexpr\jcnt+1]\relax s\fi\fi}
\newcommand\checkpages{\ifnum\jcnt=\listlen\mypages[\icnt]\relax\else%
\ifnum\listlen\mypages[\icnt,\the\numexpr\jcnt+1\relax]>1\relax from \fi\fi}
\begin{document}
\begin{enumerate}
\item \verb|\parsepages{264,15-26}|\par
\parsepages{264,15-26}
\item \verb|\parsepages{264,15-266,26}|\par
\parsepages{264,15-266,26}
\item\verb|\parsepages{264,15-266,26+277,13-14+312,14-316,23}|\par
\parsepages{264,15-266,26+277,13-14+312,14-316,23}
\end{enumerate}
\end{document}

ORIGINAL ANSWER
In this answer, "from" is inserted when the answer involves multiple sequences. Then, "from" is applied to the 1st and last sequence.
\documentclass{article}
\usepackage{listofitems}
\newcommand\parsepages[1]{%
\def\+{ and \checkfrom}%
\def\-{ to }%
\def\,{, line\checkess{} }
\setsepchar{+/-/,}
\readlist*\mypages{#1}%
\foreachitem\i\in\mypages[]{%
\ifnum\listlen\mypages[]>1\relax%
\ifnum\icnt=1\relax from \fi\fi%
\foreachitem\j\in\mypages[\icnt]{%
\foreachitem\k\in\mypages[\icnt,\jcnt]{%
\ifnum\kcnt<\listlen\mypages[\icnt,\jcnt]\relax%
page %
\fi%
\k \ifnum\kcnt<\listlen\mypages[\icnt,\jcnt]\relax
\csname\mypagessep[\icnt,\jcnt,\kcnt]\endcsname \fi%
}\ifnum\jcnt<\listlen\mypages[\icnt]\relax%
\csname\mypagessep[\icnt,\jcnt]\endcsname\fi%
}\ifnum\icnt<\listlen\mypages[]\relax%
\csname\mypagessep[\icnt]\endcsname\fi%
}%
}
\newcommand\checkfrom{\ifnum\numexpr\icnt+1=\listlen\mypages[]\relax from \fi}
\newcommand\checkess{\ifnum\numexpr\jcnt+1=\listlen\mypages[\icnt]\relax%
\ifnum\kcnt=\listlen\mypages[\icnt,\numexpr\jcnt+1]\relax s\fi\fi}
\begin{document}
\begin{enumerate}
\item \verb|\parsepages{264,15-26}|\par
\parsepages{264,15-26}
\item \verb|\parsepages{264,15-266,26}|\par
\parsepages{264,15-266,26}
\item\verb|\parsepages{264,15-266,26+277,13-14+312,14-316,23}|\par
\parsepages{264,15-266,26+277,13-14+312,14-316,23}
\end{enumerate}
\end{document}
