Usaremos la expresión regular debajo para obtener los dígitos antes de las palabras.
Ejemplo:
838123 someWord 8 someWord 12 someWord
(\d+)\s*someWord
Pero a veces cualquier cosa se interpondrá entre Número y palabra. Consulte la siguiente línea de ejemplo.
Ex:
43434 de someword 12 algo someword 2323 new someword
¿Cómo obtener el dígito exacto antes de esa palabra usando regex?
Por favor dame tus sugerencias.

Respuestas:
Hacer esto:
(\d+)[^\d]+some[wW]ordDebe aceptar cualquier otra cosa que no sean dígitos. También consideré ambos
wyWdado que sus ejemplos contenían ambos.Manifestación
fuente
Suponiendo que "cualquier cosa" no incluye dígitos, puede usar esta expresión regular:
Demo en regex101
fuente
Un posible "caso de esquina perdido" de la respuesta de CinCout es si la coincidencia
someWorddebe ser exacta, por ejemplo, sinotsomeWordysomeWordNotThisno debe ser emparejado.La siguiente extensión de esa expresión regular proporciona una manera de abordar esto:
(\d+)[^\d]*[^\w]some[wW]ord[^\w]Explicación: El
[^\w]antes o después de la matcher parasomeWordbuscar un "carácter no-palabra" antes y después de él - un extremo de la línea también cuenta aquí. Por supuesto, esto podría hacerse más complejo / específico, dependiendo de los requisitos exactos.Manifestación
fuente
Podrías probar algo como esto:
Puedes ver la prueba aquí
fuente
primero separó el
some[wW]ord,numberyspacecon un patrón, luego ejecuta el segundo patrón en élCuando se ejecuta el primer patrón, la oración será la deseada
cambio:
fuente
Pero a veces cualquier cosa se interpondrá entre Número y palabra. Consulte la siguiente línea de ejemplo.
Ex:
prueba esto
Explicado
Manifestación
fuente
El uso
\s*solo coincidirá con 0 o más caracteres de espacio en blanco.Puede usar,
\D+pero también coincidirá con las nuevas líneas, ya que coincide con cualquier carácter excepto un dígito.Si desea hacer coincidir los dígitos en la misma línea, puede agregar una línea nueva que no coincida con una clase de caracteres negada
[^\d\r\n]En su ejemplo, usa
\d, pero si solo desea hacer coincidir 1 o más dígitos 0-9 , puede usar una clase de caracteres[0-9]+Para evitar que los dígitos y la palabra formen parte de una palabra más grande, puede utilizar los límites de las palabras.
\bSi desea hacer coincidir la palabra de una manera que no distinga entre mayúsculas y minúsculas, puede usar
RegexOptions.IgnoreCaseun modificador en línea(?i)Vea una demostración de expresiones regulares .NET
fuente
Utilice las capturas de coincidencia con nombre (para obtener el uso de datos
mtch.Groups["Value"].Value... etc.) para extraer la información según sea necesario.Cuando se ejecuta lo anterior ( de lo
IgnorePatternWhiteSpacecontrario, elimine los comentarios y únase al patrón para ejecutarlo, como(?<Value>\d+)(?<Other>.+?)(?<Key>someword)sin opciones de expresiones regulares) ), obtiene los datos para cada par de Datos / Claves y organiza cada uno en una sola coincidencia.Resultado
Aquí está el resultado (para su segundo ejemplo) que están contenidos en partidos individuales y sus grupos y capturas proporcionan en cada partido:
Visualmente, esto es lo que coincide:
fuente