Así que tengo algo como esto:

Cuerda . (números1, números2, números3) así que algo como esto:

Bla bla bla . (1234, 5678, 012)

Me gustaría obtener los primeros números, es decir, los números entre (y, sin tener en cuenta el espacio antes de la coma al mismo tiempo en una expresión regular, luego obtener el segundo número en otra expresión regular sin obtener el primero entre el primero 'y el segundo '

Intenté hacer lo siguiente para obtener el primero, pero eso no funcionó incluso con el espacio:

^\(\d*,$

Incluso intenté esto:

^.*?\([^\d]*(\d+)[^\d]*\).*$

Y esto:

\[\((\d+)\).*?\]

Lo estoy probando aquí: https://regex101.com/ y sigo sin obtener coincidencias por alguna razón

Estoy tratando de implementarlo usando el lenguaje Go

1
rullzing 18 oct. 2017 a las 21:40

3 respuestas

La mejor respuesta

La primera expresión regular es

\(\s*(\d+)

Detalles

  • \( - a (
  • \s* - 0+ espacios en blanco
  • (\d+) - Grupo 1: uno o más dígitos

Y la segunda es

\(\s*\d+\s*,\s*(\d+)

Igual que el anterior (con el grupo de captura eliminado alrededor del patrón de coincidencia del primer dígito), pero se agrega \s*,\s*(\d+):

  • \s*,\s* - un , encerrado con 0+ espacios en blanco
  • (\d+) - Grupo 1: uno o más dígitos

Demostración de juegos:

Paquete principal

import (
    "regexp"
    "fmt"
)

func main() {
    var str = `bla bla bla . (1234 , 5678 , 012)`
    var re = regexp.MustCompile(`\(\s*(\d+)`)

    match := re.FindStringSubmatch(str)
    fmt.Println(match[1])

    var re2 = regexp.MustCompile(`\(\s*\d+\s*,\s*(\d+)`)
    match2 := re2.FindStringSubmatch(str)
    fmt.Println(match2[1])
}

Resultados:

1234
5678
1
Wiktor Stribiżew 18 oct. 2017 a las 20:12

Dado que no especificó un lenguaje de programación o cómo desea su salida, es difícil dar una respuesta específica, pero aquí hay algunas expresiones regulares que creo que podrían ser lo que está buscando.

Si alguno de estos es lo que estaba buscando, depende de usted implementarlos sin conocer el idioma deseado.

0
jjspace 18 oct. 2017 a las 19:01

Puede obtener todo lo que desee con una sola expresión regular y grupos con nombre:

Por ejemplo con el módulo python re:

import re

CUSTOM_REGEXP = r".+\.\s{0,}\((?P<first>\d+)\s{0,},\s{0,}(?P<second>\d+)\s{0,},\s{0,}(?P<third>\d+)\)"
match = re.match(CUSTOM_REGEXP, "bla bla bla.(1234 , 5678 , 012)"
m.group("first")  # 1234
m.group("second") # 5678
m.group("third")  # 012

Por partes:

.+ cualquier personaje al menos una repetición

\. punto literal

\s{0,} espacio opcional

Paréntesis literal \(

(?P<first>\d+) grupo nombrado de al menos un entero

Coma , literal

0
Alfredo Becerra Bauzulli 18 oct. 2017 a las 19:01