2010-12-03 14 views
9

Así que mi cadena tiene el siguiente aspecto:¿Cómo hacer coincidir todo hasta la segunda aparición de un personaje?

Basic information, advanced information, super information, no information 

Me gustaría capturar todo lo que hasta segunda coma por lo que me sale:

Información básica, información avanzada

¿Cuál sería la expresión regular para ese ?

me trataron: (.*,.*), pero me da

Información básica, avanzada de la información, la información estupendo,

+0

hasta, incluyendo, o hasta, pero no incluido? –

Respuesta

13

Esto captura hasta, pero no incluyendo la segunda coma: traducción

[^,]*,[^,]* 

Inglés:

  • [^,]* = tantos caracteres no coma como sea posible

  • , = una coma

  • [^,]* = tantos caracteres no coma como sea posible

[...] es una clase de caracteres. [abc] significa "a o b o c", y [^abc] significa cualquier cosa excepto a o bo c.

+0

@skajfes: sí, lo probé (y el anterior también). –

+0

Disculpa, fui un poco rápido en el gatillo. Eliminé el voto negativo. – skajfes

+0

@skajfes: gracias. El anterior era innecesariamente complicado: no estoy seguro de por qué utilicé una afirmación negativa para la segunda mitad cuando una vieja clase de carácter negativo funciona igual de bien aquí. –

3

usted podría intentar ^(.*?,.*?), El problema es que .* es codicioso y coincide con la cantidad máxima de caracteres. Los ? detrás * cambia el comportamiento a no codicioso.

También podría poner el paréntesis alrededor de cada uno *. segmento para capturar las cadenas por separado si lo desea.

+0

Casi funciona, me consigue: información básica, información avanzada, (coma al final) – Micor

+1

Esto también coincide con la segunda coma. No está claro a partir de la pregunta si está bien o no, él dice que quiere "información básica, información avanzada", pero quizás quiere decir que es capturado por el grupo de captura, no capturado por toda la expresión regular. –

+0

Tiene el paréntesis que debe capturar todo menos la coma al final. – skajfes

Cuestiones relacionadas