He estado tratando de extraer la palabra antes del partido. Por ejemplo, tengo la siguiente oración:

" Allatoona era una ciudad ubicada en el extremo sureste del condado de Bartow, Georgia. "

Quiero extraer la palabra antes de "Bartow".

He intentado la siguiente expresión regular para extraer esa palabra:

\w\sCounty,

Lo que me devuelven es "w County" cuando lo que quería es solo la palabra Bartow.

Cualquier ayuda sería muy apreciada. ¡Gracias!

1
Andy Evans 18 jun. 2017 a las 07:50

2 respuestas

La mejor respuesta

Puede usar esta expresión regular con anticipación para encontrar la palabra antes de County:

\w+(?=\s+County)

(?=\s+County) es una anticipación positiva que afirma la presencia de 1 o más espacios en blanco seguidos de la palabra County antes de la coincidencia actual.

Demo de RegEx

Si desea evitar mirar hacia adelante, puede usar un grupo de captura:

(\w+)\s+County

Y extraer el grupo capturado # 1 del resultado del partido.

9
anubhava 18 jun. 2017 a las 04:53

Su \w\sCounty, expresión regular devuelve w County porque \w coincide con un carácter único que es una letra, un dígito o _. No coincide con una palabra completa .

Para hacer coincidir 1 o más símbolos, debe usar un + cuantificador y para capturar la parte que necesita extraer puede confiar en capturar grupos , {{ X1}}.

Por lo tanto, puede corregir su patrón simplemente reemplazando \w con (\w+) y luego, después de obtener una coincidencia, acceda a Match.Groups[1].Value.

Sin embargo, si el nombre del condado contiene un símbolo que no es una palabra, como un guión, \w+ no coincidirá. Una \S+ que coincida con 1 o más símbolos que no sean espacios en blanco podría resultar una mejor opción en ese caso.

Consulte una demostración de C #:

var m = Regex.Match(s, @"(\S+)\s+County");
if (m.Success) 
{
     Console.WriteLine(m.Groups[1].Value);  
}

Vea un demostración de expresiones regulares. ingrese la descripción de la imagen  aquí

2
Graham 24 sep. 2017 a las 05:01