Me gustaría dividir este tipo de cadenas en dos grupos:

    aaa.aa.aa.1
    aaa.aa.aa
    bbbbb.1
    bbbbb

Tener en el primer grupo caracteres antes de .1 y en el otro grupo 1 o vacío si no hay 1 al final:

   aaa.aa.aa     1
   aaa.aa.aa     
   bbbbb         1
   bbbbb

Me gustaría lograr este con una expresión regular. Se me ocurrió (\S*).(1), pero no se divide, si no hay 1 al final.

0
mbt 25 oct. 2019 a las 18:20

1 respuesta

La mejor respuesta

Prueba este patrón: (\S*?)(?:\.(1)$|$)

Explicación

(\S*?): el \S* de su patrón con un cuantificador perezoso agregado (?). Esto coincidirá con la menor cantidad de caracteres posible.

(?: ... ): grupo sin captura para mantener los números de grupo de captura deseados

\.(1)$|$ - (1) punto literal \. seguido de un 1 literal (almacenado en el grupo de captura) seguido del final de la cadena $ O (2) final de la cadena ( en caso de que .1 no esté presente)

Prueba de muestra

ENTRADA:

aaa.aa.aa.1
aaa.aa.aa
bbbbb.1
bbbbb

Salida:

[1] aaa.aa.aa    [2] 1
[1] aaa.aa.aa    [2] (empty)
[1] bbbbb        [2] 1
[1] bbbbb        [2] (empty)

NOTA : Pregunta en los comentarios sobre la situación aaa.aa.aa. y se estableció que esta no es una entrada esperada. Este patrón no eliminará el último punto ya que no hay 1

0
dvo 25 oct. 2019 a las 15:39