2012-08-08 11 views
11

Supongamos que tengo el siguiente texto en un archivo de textoCómo hacer coincidir cadena entre comillas usando expresiones regulares

primer texto

"Algunos de texto"

"txt 124arandom que no debe ser analizada! @

"124 Algunas de texto"

"어떤 글"

este texto es un "bien" no debe ser analizado

Me gustaría recuperar Some Text, 124 Some Text y 어떤 글 como cadenas coincidentes. El texto se lee línea por línea. Catch es, tiene que coincidir con idiomas extranjeros si está dentro de comillas.

Actualización: Me enteré de algo raro. Estaba tratando algunas cosas al azar y se encontró que:

string s = "어떤 글" 
Regex regex = new Regex("[^\"]*"); 
MatchCollection matches = regex.Matches(s); 

partidos tienen un conteo = 10 y han generado algunos elementos vacíos en el interior (El texto analizado se encuentra en el índice 2). Esto podría haber sido el motivo por el que recibí cadenas vacías cuando estaba haciendo Regex.Replace. ¿Por qué está pasando esto?

+0

¿Has consultado preguntas relacionadas al publicar esta? – JleruOHeP

+0

¿Se garantiza que cada cadena citada esté en su propia línea, con el carácter '" 'al principio y al final de la línea? – Dan

+0

@JleruOHeP Lo hice y no fueron realmente útiles – l46kok

Respuesta

21

Si usted lee el texto línea por línea, entonces la expresión regular

"[^"]*" 

encontrará todas las cadenas entre comillas, a menos que los que pueden contener frases como "a 2\" by 4\" board" escapado.

para que coincida con los correctamente, es necesario

"(?:\\.|[^"\\])*" 

Si no desea que las cotizaciones a formar parte del partido, utilice lookaround assertions:

(?<=")[^"]*(?=") 
(?<=")(?:\\.|[^"\\])*(?=") 

Estas expresiones regulares, como C# expresiones regulares, se puede crear de esta manera:

Regex regex1 = new Regex(@"(?<="")[^\""]*(?="")"); 
Regex regex2 = new Regex(@"(?<="")(?:\\.|[^""\\])*(?="")"); 
+0

Intenté esto, pero no funciona para idiomas extranjeros. ¿Cuál podría ser la posible causa? – l46kok

+0

'[^"] 'coincide con cualquier carácter excepto las comillas, por lo que también debe coincidir con los caracteres en idiomas extranjeros. ¿Cómo se usa exactamente la expresión regular? ¿Podría haber idiomas de derecha a izquierda? –

+1

He actualizado mi OP – l46kok

0

. Puede usar una expresión regular y luego tratar de hacerla coincidir con el texto que desee. puede estar en un bucle o lo que necesites.

string str = "\"your text\""; 
//check for at least on char inside the qoutes 
Regex r = new Regex("\".+\""); 
bool ismatch = r.IsMatch(str); 
+0

¿Creí que se habían escapado las comillas en C# al doblar? –

+0

no, no lo hacen. el carácter de escape es '\' si quieres que el qout esté en tu texto, debes poner \ antes o @ antes de todo el texto, así: @ "" hola todo "" = "\" hola todo \ "" = texto impreso "Hola a todos" – YAYAYAYA

+0

Ah, está bien, siempre uso cadenas '@' para las expresiones regulares en C# porque hay una alta probabilidad de que se necesiten barras diagonales inversas para la propia expresión regular :) –

Cuestiones relacionadas