tengo una cadena:
str = "1 - hello world 1234 abc 5678 def" Quiero tomar 1234 abc de la cadena.
Mi implementación actual str[/\d+\s*\D*$/] solo toma el último número con la palabra.
Puedes usar
str[/\d+\D+(\d+\s*\w+)/, 1] str[/\d+\D+\K\d+\s*\w+/]Vea esta demostración de expresiones regulares y esta demostración de expresiones regulares #2 .
Aquí, solo se busca la primera coincidencia de expresiones regulares. Detalles :
\d+ - uno o más dígitos\D+ - uno o más no dígitos(\d+\s*\w+) - Grupo 1: uno o más dígitos, cero o más espacios en blanco y uno o más caracteres de palabra\K : operador de reinicio de coincidencia que descarta todo el texto coincidente hasta el momento.NOTA :
\w+ con \S+\d+ con \d*\.?\d+ o \d+(?:\.\d+)? patrones.Aquí hay una prueba de Ruby :
str = "1 - hello world 1234 abc 5678 def" puts str[/\d+\D+(\d+\s*\w+)/, 1] # => 1234 abc puts str[/\d+\D+\K\d+\s*\w+/] # => 1234 abc