/ / ¿Regex haciendo coincidir el patrón “a> b> c”? - expresiones regulares

Regex que coincide con el patrón "a> b> c" - Regex

¿Cuál sería una expresión regular adecuada paracoincide con un patrón de ">" o "|" ¿Tiene un mínimo de 3 apariciones como el siguiente ejemplo? Me gustaría hacer coincidir entre ">" o "|" (no ambos) en un texto dado con espaciado irregular entre ellos.

Debe coincidir

  • "a> b> c> d> e"

  • "a | b | c | d | e"

No debería coincidir

  • "a> b> c" (solo 2 ">")

  • "a | b> c | d | e" (no ">" o "|")

Código Java de muestra para probar las expresiones (solo se escapan barras invertidas)

public static void main(String[] args) {
List<String> patterns = new ArrayList<String>();
patterns.add("/((\s*\w+\s*>\s*){3,}|(\s*\w+s*\|\s*){3,})\w/g");
patterns.add("^( ([\w\s]*>){3,} | ([\w\s]*\|){3,} )[\w\s]*$");
patterns.add("/(>|\|)[^>\|]*\1[^>\|]*\1/");
patterns.add("/[\w ]*([>|])(?:[\w ]*\1){2,}[\w ]*/");

List<String> test = new ArrayList<String>();
test.add("a > b > c > d");
test.add("a >b> c> d");
test.add("a>b>c>d");
test.add("a>b>c");

for (String s : test) {
for (int i = 0; i < patterns.size(); i++) {
System.out.println(s + "[Pattern " + i + "] " + s.matches(patterns.get(i)));
}
}
}

Respuestas

1 para la respuesta № 1
/(s*w+s*([>|])s*)(s*w+s*2s*){2,}w*/

Esto funciona suponiendo que necesitas un personaje (o másentre el | o> símbolos): los símbolos no se pueden mezclar de ninguna manera en la línea a la que se aplica la expresión regular. Y por supuesto se maneja el espaciado irregular. Grupos completos son capturados adicionalmente.

Aclamaciones.


1 para la respuesta № 2
/[w ]*([>|])(?:[w ]*1){2,}[w ]*/

Haga coincidir a> o a, y luego asegúrese de que aparezca dos veces más (al menos).


0 para la respuesta № 3

Puedes intentar agrupar y volver referencias.

/(>||)[^>|]*1[^>|]*1/

0 para la respuesta № 4

Después de un par de pruebas, decidí usar esta expresión regular:

((\s)*(\w)+((\s)+(\w)+)*(\s)*((>)(\s)*(\w)+((\s)+(\w)+)*(\s)*){3,})|((\s)*(\w)+((\s)+(\w)+)*(\s)*((|)(\s)*(\w)+((\s)+(\w)+)*(\s)*){3,})

para que coincida con todos esos casos de prueba:

    test.add(" a > bbb >   ccc >   dc");//true
test.add("a > b > c > d");//true
test.add("a >b> c> d");//true
test.add("a>b>c>d");//true
test.add("a>b>c");//false
test.add("a>b>c| d >e >f");//false
test.add(">a>b>c> d >e >f");//false
test.add("<a>b>c> d >e >f");//false
test.add("a>b>c< d >e >f");//false
test.add("a>b>c> d >e >f>");//false
test.add("a b>b>c d > d >e >f> a bcd");//true,
test.add("ayse ciog > ayse ciog > ayse ciog > ayse ciog");//true

Y obteniendo resultados exitosos ahora, gracias por su ayuda.