Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

406
Views
Regex: captura uno o más grupos si existe (Java)

Quiero capturar grupos que coincidan con un patrón donde la entrada puede contener este grupo una o más veces.

Ejemplo:

 input = 12361 randomstuff371 12 Mar 16 138more random381 stuff73f

Quiero capturar el "12 Mar 16".

A partir de esto, he usado fácilmente la expresión regular:

 pattern = (".*(\\d{2}\\s\\w+\\s\\d{2}).*");

Sin embargo, mi problema es que cuando la entrada puede contener más de uno de estos grupos, no puedo capturar las coincidencias posteriores.

Ejemplo:

 input = randomstuff371 12 Mar 16 14 Jan 15 13 Feb 16 138more random381 stuff73f

Tal que:

 group 1 = 12 Mar 16 group 2 = 14 Jan 15 group 3 = 13 Feb 16

El número de estos grupos para hacer coincidir siempre variará, por lo que me pregunto si hay una expresión regular que funcione con entradas que contengan 1 o más de estos grupos. Yo he tratado:

 pattern = (".*(\\d{2}\\s\\w+\\s\\d{2}\\s)+.*"); \\ Not sure about whitespace at the end

Sin embargo, no funciona. ¿Tiene esto más que ver con la forma en que estoy almacenando estos grupos capturados? No puedo predeterminar la cantidad de grupos que necesitaré, especialmente porque la expresión regular necesita trabajar con muchas de estas entradas.

Siento que es mejor capturar todo el segmento de fechas y manejarlo más tarde con matcher.find() para contar la cantidad de grupos que necesito.

Cualquier ayuda será muy apreciada.

about 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Será más fácil hacer coincidir el patrón específico suyo y obtener las subcadenas como coincidencias múltiples obtenidas usando Matcher#find() :

 String s = "randomstuff371 12 Mar 16 14 Jan 15 13 Feb 16 138more random381 stuff73f"; Pattern pattern = Pattern.compile("\\b\\d{2}\\s\\w+\\s\\d{2}\\b"); Matcher matcher = pattern.matcher(s); while (matcher.find()){ System.out.println(matcher.group(0)); }

Vea la demostración de Java en línea y la demostración de expresiones regulares .

Agregué límites de palabras al patrón para asegurarme de que el patrón coincida como una palabra completa, pero pueden omitirse si sus subcadenas están pegadas a otro texto.

about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!