Quiero comprobar si un determinado patrón (por ejemplo, una cadena con comillas dobles) coincide en una posición exacta.Regex coincidente en el desplazamiento exacto
Ejemplo
string text = "aaabbb";
Regex regex = new Regex("b+");
// Now match regex at exactly char 3 (offset) of text
me gustaría comprobar si regex
partidos en exactamente carbón 3.
yo tuvimos un vistazo a la Regex.Match Method (String, Int32)
pero no se comporta como lo que esperaba.
Así que hice algunas pruebas y algunas soluciones:
public void RegexTest2()
{
Match m;
string text = "aaabbb";
int offset = 3;
m = new Regex("^a+").Match(text, 0); // lets do a sanity check first
Assert.AreEqual(true, m.Success);
Assert.AreEqual("aaa", m.Value); // works as expected
m = new Regex("^b+").Match(text, offset);
Assert.AreEqual(false, m.Success); // this is quite strange...
m = new Regex("^.{"+offset+"}(b+)").Match(text); // works, but is not very 'nice'
Assert.AreEqual(true, m.Success);
Assert.AreEqual("bbb", m.Groups[1].Value);
m = new Regex("^b+").Match(text.Substring(offset)); // works too, but
Assert.AreEqual(true, m.Success);
Assert.AreEqual("bbb", m.Value);
}
De hecho estoy empezando a creer que se new Regex("^.", 1).Match(myString)
no coincidir con cualquier cosa.
¿Alguna sugerencia?
Editar:
que tiene una solución de trabajo (solución). Entonces mi pregunta es acerca de la velocidad y una buena implementación.
¡Muy buena idea! –
Batirme por 8 segundos, me demoré demasiado para confirmar ': P'. '\ G' es correcto aquí, pero agregaría una advertencia sobre el uso del mismo objeto' Regex', suponiendo que el OP no creará uno nuevo cada vez. No estoy muy seguro de cómo se comportaría, pero puede recordar la última posición, incluso con el desplazamiento. Vale la pena comprobarlo. (De nuevo, no estoy seguro) – Kobi
@Kobi - Sospecho que este puede ser el caso solo si usa m.MatchNext(), no si vuelve a llamar a Match() en el mismo objeto Regex. – CAFxX