2011-03-11 10 views
6

Tengo una cadena de entrada como "=== text === y === text ===" y quiero reemplazar la sintaxis de wiki con la etiqueta html correspondiente.problema gregario regex (C#)

de entrada:

===text=== and ===text=== 

salida deseable:

<h1>text</h2> and <h1>text</h2> 

pero con el siguiente código me sale esta salida:

var regex = new Regex("---(.+)---"); 
var output = regex.Replace("===text=== and ===text===", "<h1>$1</h1>"); 

<h1>text=== and ===text</h1> 

Sé que el problema es que mi expresión coincide con codiciosos . Pero cómo hacer que no sean codiciosos.

Gracias y saludos cordiales. Danny

+0

Prueba esto en el tamaño: http: // RegExr .com? 2t9he –

Respuesta

13

Añadir la question mark a su expresión regular: (. +?) === ===

Una mejor alternativa sería tener una expresión regular de la siguiente forma: === ([^ \ =] +) ===. Consulte this guide en el carácter de punto para obtener una explicación del uso del punto con moderación. Cuando comparo mi regex suministrada, es de aprox. 50% más rápido que tu expresión regular.

+0

Gracias. Tomé el segundo "=== ([^ \ =] +) ===". – dannyyy

3

Para hacer un Regex no codicioso que utiliza?

Así, la expresión "=== === (+.?)" Tendría dos partidos para que - por lo que deben permitirá generar <h1>text</h1> y <h1>text</h1>

0

Simplemente dd un ? tal vez?

===.+?=== 
0

voy a añadir otra variante: ===((?:(?!===).)*)=== (detener la captura de cualquier carácter cuando se encuentra con ===) ... Ah ... y para el problema . sugerido por WiseGuyEh, sugiero RegexOptions.SingleLine, por lo que el partido ni siquiera . la nueva línea

0

Y sólo para información si los demás tienen el mismo problema, entonces yo tenía - para evitar la coincidencia también ====Text==== en lugar de ===Text=== Hemos ampliado en el patrón de esta manera: (?<!=)===([^=]+)===(?!=)