There are still some corner cases to be ironed out as in anchors and special sequences cases. But this implementation is is useful enough for basic text processing.
vanangamudi@karunthulai:~/agam/projects/code/tamilnlp/tamil-regex
$ python3 ta_re.py
தமிழ், தமிழ் == தமிழ்
தமிழ், உயர்தனிச்செம்மொழி தமிழ் == தமிழ்
த*மிழ், தததததததமிழ் == தததததததமிழ்
[தஅ]மிழ், தமிழ் == தமிழ்
[தஅ]மிழ், அமிழ் == அமிழ்
செ.தமிழ், செந்தமிழ் == செந்தமிழ்
செ.தமிழ், செதமிழ் == False
[தஅ]*மிழ், மிழ் == மிழ்
[தஅ]*மிழ், தததததமிழ் == தததததமிழ்
[தஅ]*மிழ், அஅஅஅஅமிழ் == அஅஅஅஅமிழ்
[தஅ]* மிழ், தஅஅஅதஅதஅ மிழ் == தஅஅஅதஅதஅ மிழ்
(செம்மொழி)* தமிழ், தமிழ் == தமிழ்
(உயர்|தனி|ச்?செம்)+மொழி தமிழ், உயர்மொழி தமிழ் == உயர்மொழி தமிழ்
(உயர்|தனி|ச்?செம்)+மொழி தமிழ், தனிமொழி தமிழ் == தனிமொழி தமிழ்
(உயர்|தனி|ச்?செம்)+மொழி தமிழ், செம்மொழி தமிழ் == செம்மொழி தமிழ்
(உயர்|தனி|ச்?செம்)+மொழி தமிழ், உயர்செம்மொழி தமிழ் == உயர்செம்மொழி தமிழ்
(உயர்|தனி|ச்?செம்)+மொழி தமிழ், உயர்தனிமொழி தமிழ் == உயர்தனிமொழி தமிழ்
(உயர்|தனி|ச்செம்)+மொழி தமிழ், உயர்தனிசெம்மொழி தமிழ் == False
(உயர்|தனி|ச்செம்)+மொழி தமிழ், உயர்தனிச்செம்மொழி தமிழ் == உயர்தனிச்செம்மொழி தமிழ்
(உய*ர்|தனி|ச்செம்)+மொழி தமிழ், உயயயர்தனிச்செம்மொழி தமிழ் == உயயயர்தனிச்செம்மொழி தமிழ்
(உய*ர்|தனி|ச்செம்)+மொழி தமிழ், உர்தனிச்செம்மொழி தமிழ் == உர்தனிச்செம்மொழி தமிழ்
(உய+ர்|தனி|ச்செம்)+மொழி தமிழ், உர்தனிச்செம்மொழி தமிழ் == தனிச்செம்மொழி தமிழ்
^தமிழ், தமிழ்---- == தமிழ்
தமிழ்$, -----தமிழ் == False
தமிழ்$, -----தமிழ் == False
தமிழ்$, தமிழ்---- == False
^தமிழ்$, -தமிழ்- == False
^தமிழ்$, தமிழ் == False
\எ ஆயிரம், 1 ஆயிரம் == 1 ஆயிரம்
\எ+ \சொ\சொ, 1000 ஆயிரம் == 1000 ஆயி
\எ+ \சொ+, 1000 ஆயிரம் == 1000 ஆயிரம்
\எ+ \சொ+, ௧௦௦௮ ஆயிரம் == ௧௦௦௮ ஆயிரம்
\எ+\சொ*, 1000 மைல் == 1000 மைல்
\எ+\சொ*, 1000 == 100
vanangamudi@karunthulai:~/agam/projects/code/tamilnlp/tamil-regex
$
தமிழ், தமிழ் == தமிழ்
தமிழ், உயர்தனிச்செம்மொழி தமிழ் == தமிழ்
த*மிழ், தததததததமிழ் == தததததததமிழ்
[தஅ]மிழ், தமிழ் == தமிழ்
[தஅ]மிழ், அமிழ் == அமிழ்
செ.தமிழ், செந்தமிழ் == செந்தமிழ்
செ.தமிழ், செதமிழ் == False
[தஅ]*மிழ், மிழ் == மிழ்
[தஅ]*மிழ், தததததமிழ் == தததததமிழ்
[தஅ]*மிழ், அஅஅஅஅமிழ் == அஅஅஅஅமிழ்
[தஅ]* மிழ், தஅஅஅதஅதஅ மிழ் == தஅஅஅதஅதஅ மிழ்
(செம்மொழி)* தமிழ், தமிழ் == தமிழ்
(உயர்|தனி|ச்?செம்)+மொழி தமிழ், உயர்மொழி தமிழ் == உயர்மொழி தமிழ்
(உயர்|தனி|ச்?செம்)+மொழி தமிழ், தனிமொழி தமிழ் == தனிமொழி தமிழ்
(உயர்|தனி|ச்?செம்)+மொழி தமிழ், செம்மொழி தமிழ் == செம்மொழி தமிழ்
(உயர்|தனி|ச்?செம்)+மொழி தமிழ், உயர்செம்மொழி தமிழ் == உயர்செம்மொழி தமிழ்
(உயர்|தனி|ச்?செம்)+மொழி தமிழ், உயர்தனிமொழி தமிழ் == உயர்தனிமொழி தமிழ்
(உயர்|தனி|ச்செம்)+மொழி தமிழ், உயர்தனிசெம்மொழி தமிழ் == False
(உயர்|தனி|ச்செம்)+மொழி தமிழ், உயர்தனிச்செம்மொழி தமிழ் == உயர்தனிச்செம்மொழி தமிழ்
(உய*ர்|தனி|ச்செம்)+மொழி தமிழ், உயயயர்தனிச்செம்மொழி தமிழ் == உயயயர்தனிச்செம்மொழி தமிழ்
(உய*ர்|தனி|ச்செம்)+மொழி தமிழ், உர்தனிச்செம்மொழி தமிழ் == உர்தனிச்செம்மொழி தமிழ்
(உய+ர்|தனி|ச்செம்)+மொழி தமிழ், உர்தனிச்செம்மொழி தமிழ் == தனிச்செம்மொழி தமிழ்
^தமிழ், தமிழ்---- == தமிழ்
தமிழ்$, -----தமிழ் == False
தமிழ்$, -----தமிழ் == False
தமிழ்$, தமிழ்---- == False
^தமிழ்$, -தமிழ்- == False
^தமிழ்$, தமிழ் == False
\எ ஆயிரம், 1 ஆயிரம் == 1 ஆயிரம்
\எ+ \சொ\சொ, 1000 ஆயிரம் == 1000 ஆயி
\எ+ \சொ+, 1000 ஆயிரம் == 1000 ஆயிரம்
\எ+ \சொ+, ௧௦௦௮ ஆயிரம் == ௧௦௦௮ ஆயிரம்
\எ+\சொ*, 1000 மைல் == 1000 மைல்
\எ+\சொ*, 1000 == 100