Supongamos que tengo una subcadena BB que puede estar sola o ser parte de una cadena más larga, p. Ej. BB o AA | BB | CC o BB | CC o AA | BB, es decir, si sigue/es seguido por otra subcadena, DEBE estar separada por un |. ¿Qué expresiones regulares necesito para encontrar BB en cualquiera de los anteriores pero no en decir AABB?regex para buscar la subcadena
Respuesta
creo que esto lo hará:
^(.+[|])?BB([|].+)?$
Y después de probar here voy a decir que sí, eso es todo.
si ese último '?' Estuviera presente ya que siempre quiere | CC después del BB –
. En realidad, yo también pensé en eso. Sin embargo, la pregunta SÓLO dice que 'BB' tiene que tener' | 'en cada lado. No dice nada sobre OTRAS cadenas. Entonces, lo único que me importa es que es 'BLAHBLAHBLAH | BB | BLAHBLAHBLAH'. –
¿Por qué el '[|]'? Simplemente use '\ |' – Eric
Si sus subseries se limitan a caracteres alfanuméricos, que ca usa:
\bBB\b
si no, se puede simular la misma utilizando lookarounds:
(?<=\||^)BB(?=\||$)
Su subcadena debe ser antes y después de una tubería, o cerca de los bordes.
"Si sus subcadenas están limitadas a caracteres alfanuméricos ..." - * ASCII * alfanuméricos, es decir. Pero creo que el enfoque alternativo es más correcto de todos modos. Mira mi variación, sin embargo. No es mejor que el tuyo, solo un ejercicio de expansión mental. ;) –
No sé si es la posición que desea, pero esta captura donde BB comienza y termina, si BB es seguido por '|' o extremos de la cadena:
String data = "AA|BB|CCBBCC|BB";
Matcher m = Pattern.compile("(BB)(?:\\||$)").matcher(data);
while (m.find()) {
System.out.println(m.group(1) + " starts at " + m.start() + " ends at " + m.end(1));
}
Debe sellar la parte delantera y la trasera. Tal como están las cosas, su expresión regular coincidirá con las dos últimas 'B' en' BBB', 'ABB',' BBB | CC', etc., y no creo que OP quiera eso. –
No estoy seguro de lo que el OP realmente quiere, pero no ha dicho nada sobre si 'BB' en' ABB | 'debe coincidir o no.(Sí, mi expresión lo trata como una coincidencia) – Kaj
Aquí hay otra opción:
Pattern p = Pattern.compile("(?<![^|])BB(?![^|])");
String[] input = { "AABB", "BB", "AA|BB|CC", "BB|CC", "AA|BBB", "BBB|AA" };
for (String s : input)
{
Matcher m = p.matcher(s);
System.out.printf("%-10s : %b%n", s, m.find());
}
de salida:
AABB : false
BB : true
AA|BB|CC : true
BB|CC : true
AA|BBB : false
BBB|AA : false
Este es efectivamente el mismo que @ respuesta de Kobi, pero donde él está diciendo la BB
es precedido/seguido de una tubería o el principio/final de la cadena, estoy haciendo la afirmación equivalente de que NO está precedido/seguido de un carácter que NO es una tubería.
Extraño. Siempre cambio las miradas que marcan el inicio/final de la cadena al estilo opuesto, pero no pude hacer que funcione. (¡Oh, tuve '[^ |]' coincidir con líneas nuevas!) – Kobi
Sí, esto también funciona. Gracias – user580459
- 1. Buscar subcadena en una cadena usando C#
- 2. Buscar subcadena ignorando los caracteres especificados
- 3. regex para buscar una cadena entre corchetes []
- 4. ¿Cómo extraer una subcadena de .NET RegEx?
- 5. subcadena Ruby sub sin regex referencias atrás
- 6. Sed regex y subcadena de negación
- 7. Regex para buscar llamadas al método
- 8. Buscar si existe una subcadena en una cadena
- 9. Usar expresión regular para buscar/reemplazar subcadena en NSString
- 10. ¿Cómo buscar una subcadena en SQLite?
- 11. expresiones regulares: Buscar cadena sin subcadena
- 12. Buscar subcadena en una lista de cadenas
- 13. Buscar subcadena en cadena pero solo si las palabras completas?
- 14. ¿Cómo usar javascript regex para buscar campos de formulario "vacíos"?
- 15. buscar y reemplazar con ruby regex
- 16. ¿Cómo puedo reemplazar una coincidencia de subcadena regex en Javascript?
- 17. Cómo buscar archivos según RegEx en C#
- 18. Buscar todas las ocurrencias y ubicaciones de una subcadena
- 19. ¿Cómo buscar texto rodeado de comillas dobles con RegEx?
- 20. Buscar una subcadena en una cadena en Oracle sin LIKE
- 21. Buscar subcadena dentro de una entidad usando objectify
- 22. ¿cómo se extrae la subcadena (grupo) usando regex sin saber si la expresión regular coincide?
- 23. Regex para que coincida con algo que no sea una subcadena específica
- 24. Usar la función INSTR de Oracle para buscar múltiples cadenas
- 25. Regex para que coincida con una cadena completa solo si carece de una subcadena/sufijo dado
- 26. Regex: Para sacar una subcadena entre dos etiquetas en una cadena
- 27. ¿Buscar una cadena para una subcadena en un archivo por lotes (Windows)?
- 28. Regex para buscar datos en la columna específica de una línea
- 29. Dividir en la subcadena
- 30. Buscar una lista de cadenas para cualquier subcadena de otra lista
¿Está tratando de encontrar si una cadena contiene | BB | pero no AABB, o es suficiente la cadena para contener | BB | ignorando el resto? O bien, quiere corregir las posiciones de todos | BB | en una sola cuerda? –
No lo entiendo ¿Desea encontrar aquellos que son seguidos por '|' o aquellos que no son seguidos por '|' – Kaj
asegúrate de aceptar una respuesta si hay una buena. No es necesario que sea mío, pero, en general, debe aceptar las respuestas si las ha respondido a su satisfacción. –