Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

466
Visualizações
Obtener números separados por comas por expresiones regulares

Necesito buscar enteros separados por comas de una cadena de formato específico usando el método Ruby String#match :

 'text PaymentID: 12345'.match(PATTERN)[1..-1] # expected result: ['12345'] 'text Payment ID: 12345'.match(PATTERN)[1..-1] # expected result: ['12345'] 'text Payment id 12345'.match(PATTERN)[1..-1] # expected result: ['12345'] 'text paymentid:12345'.match(PATTERN)[1..-1] # expected result: ['12345'] 'text payment id: 12345'.match(PATTERN)[1..-1] # expected result: ['12345'] 'text payment ID: 111,999'.match(PATTERN)[1..-1] # expected result: ['111', '999'] 'text payment ID: 111, 222, 333'.match(PATTERN)[1..-1] # expected result: ['111', '222', '333']

Por lo tanto, todos los espacios y el símbolo ':' son opcionales, el patrón no debe distinguir entre mayúsculas y minúsculas, el texto antes del payment puede contener cualquier carácter. Mi última variante no fue lo suficientemente buena:

 PATTERN = /payment[\s]?id[:]?[\s]?(\d+)(?:[,]?[\s]?(\d+))+/i > 'text Payment id: 12345'.match(PATTERN)[1..-1] => ["1234", "5"] > 'text Payment id: 12345, 333, 91872389'.match(PATTERN)[1..-1] => ["12345", "91872389"]

¿Alguna idea sobre cómo lograr esto? Gracias por adelantado.

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Puedes usar

 text.scan(/(?:\G(?!\A)\s*,|payment\s?id:?)\s*\K\d+/i)

Las coincidencias de expresiones regulares

  • (?:\G(?!\A)\s*,|payment\s?id:?) - el final de la coincidencia exitosa anterior y luego cero o más espacios en blanco y una coma o payment , un espacio en blanco opcional, id y dos puntos opcionales
  • \s* - cero o más espacios en blanco
  • \K elimina lo que se acaba de consumir del partido
  • \d+ - uno o más dígitos.
over 4 years ago · Santiago Trujillo Relatório

0

No puede repetir un grupo de captura ya que la última aparición sobrescribirá la anterior. Lo que puede hacer es usar un patrón basado en \G que asegure la contigüidad entre coincidencias sucesivas con el método de escaneo:

 PATTERN = /(?:(?!\A)\G\s*,|payment\s*id\s*:?)\s*(\d+)/i 'text Payment id: 12345, 333, 91872389'.scan(PATTERN).flatten

En resumen, el payment\s*id\s*:? tiene que tener éxito primero, para permitir que la primera rama (?!\A)\G\s* tenga éxito en las próximas coincidencias.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda