Bien qu'une réponse ait été apportée, j'en propose une seconde en utilisant LuaLaTeX :
\documentclass{article}
\usepackage{luacode}
\begin{luacode}
function if_begin_tube(String)
local x = string.sub(String,1,1)
string.sub(String,1,1) -- on stocke le premier caractère dans une variable
if x=="|" then
then -- si ce premier caractère est un tube...
String = string.gsub(String,"|","",1)
tex.sprint("\\begin{tabular}{"..String.."}")
else
tex.sprint("\\begin{tabular}{||"..String.."||}")
string.gsub(String,"|","",1) -- on le supprime de la chaîne
tex.sprint("\\begin{tabular}{"..String.."}") -- on ouvre le tableau avec la chaîne modifiée
else -- sinon...
tex.sprint("\\begin{tabular}{||"..String.."||}") -- on ouvre le tableau avec la chaîne modifiée encadrée par un double tube
end
end
\end{luacode}
\newcommand\BeginMyTabular[1]{\directlua{if_begin_tube(\luastring{#1})}}
\newenvironment{mytabular}[1]{\BeginMyTabular{#1}}{\end{tabular}}
\begin{document}
\begin{mytabular}{c|c}
\hline
1 & 2 \\
\hline
3 & 4 \\
\end{mytabular}
\bigskip
\begin{mytabular}{|cc}
\hline
4 & 5\\
\hline
6 & 7 \\
\end{mytabular}
\end{document}