La cadena de entrada es algo como esto: OU = PRUEBA: This001. Necesitamos más "This001". Lo mejor en C#.Regex para que coincida con una cadena después de dos puntos
Respuesta
¿Qué hay de:
/OU=.*?:(.*)/
Así es como funciona:
OU= // Must contain OU=
. // Any character
* // Repeated but not mandatory
? // Ungreedy (lazy) (Don't try to match everything)
: // Match the colon
( // Start to capture a group
. // Any character
* // Repeated but not mandatory
) // End of the group
Para el /
son delimitadores saber dónde está el comienzo de expresiones regulares y dónde termina (y para añadir opciones) .
El grupo capturado contendrá This001
.
Pero sería más rápido con un simple Substring()
.
yourString.Substring(yourString.IndexOf(":")+1);
Recursos:
"OU =" huele a que está haciendo un directorio LDAP o Búsqueda activa y la respuesta a los resultados. Si bien Regex es una herramienta brillante, solo quería asegurarme de que también conoces las excelentes clases System.DirectoryServices.Protocols que se realizaron para analizar, filtrar y manipular solo este tipo de datos.
SearchResult, SearchResultEntry y DirectoryAttribute en particular serían los amigos que podría estar buscando. No dudo que puedas regex o subcadena tan hábilmente como el siguiente tipo pero también es bueno tener otra buena herramienta en la caja de herramientas.
¿Has probado estas clases?
Esto es de un certificado. "OU =" es parte del nombre del sujeto de System.Security.Cryptography.X509Certificates. – Icerman
si el OU=TEST:
es su requisito antes de la cadena que desea hacer coincidir, utilice esta expresión regular:
(?<=OU\s*=\s*TEST\s*:\s*).*
que expresión coincide con cualquier longitud de texto después de los dos puntos, mientras que cualquier texto antes de los dos puntos es sólo un requisito .
Puede reemplazar TEST
con [A-Za-z]+
para que coincida con cualquier texto que no sea TEST, o se puede sustituir con TEST
[\w]+
para adaptarse a cualquier longitud de cualquier combinación de alfabeto y los números.
\s*
significa que puede haber cualquier cantidad de espacios en blanco o nada en esa posición, quítelo si no necesita dicho control.
una solución sin expresión regular:
var str = "OU=TEST:This00:1";
var result = str.Split(new char[] { ':' }, 2)[1];
// result == This00:1
Regex vs de Split vs IndexOf
de Split
var str = "OU=TEST:This00:1";
var sw = new Stopwatch();
sw.Start();
var result = str.Split(new char[] { ':' }, 2)[1];
sw.Stop();
// sw.ElapsedTicks == 15
Regex
var str = "OU=TEST:This00:1";
var sw = new Stopwatch();
sw.Start();
var result = (new Regex(":(.*)", RegexOptions.Compiled)).Match(str).Groups[1];
sw.Stop();
// sw.ElapsedTicks == 7000 (Compiled)
IndexOf
var str = "OU=TEST:This00:1";
var sw = new Stopwatch();
sw.Start();
var result = str.Substring(str.IndexOf(":") + 1);
sw.Stop();
// sw.ElapsedTicks == 40
Ganador: de Split
Enlaces
Buena idea, pero solo "OU =" y ":" tienen un valor/longitud fija. Todo lo demás es variable. – Icerman
@Icerman: La longitud no importa, si tiene al menos un ':' obtendrá todo después de ella. – BrunoLM
'str.Split (new char [] {':'}, 2)' el segundo parámetro indica cuántas piezas se dividirán. Diciendo que se divida en 2 causará 'OU = jjj: kkkkkk: aaaaa: ssssss: xxxx' devolverá 2 grupos:' OU = jjj' y 'kkkkkk: aaaaa: ssssss: xxxx' – BrunoLM
- 1. C#. Regex más rápida para que coincida con cualquier cadena
- 2. Regex para que coincida con una palabra con signos + (más)
- 3. Regex para que coincida con Domain.CCTLD
- 4. Regex para que coincida con una dirección IP
- 5. Regex para que coincida cuando una cadena está presente dos veces
- 6. Regex para que coincida con el último carácter de espacio
- 7. Regex para que coincida con la primera aparición de una cadena
- 8. Regex para que coincida con palabras completas que comienzan con $
- 9. Java REGEX para que coincida con un número exacto de dígitos en una cadena
- 10. Regex para que coincida con una ruta en C#
- 11. Regex para que coincida con una cadena completa solo si carece de una subcadena/sufijo dado
- 12. Regex para que coincida con palabras parciales (JavaScript)
- 13. Regex para que coincida con una cadena NO rodeada de corchetes
- 14. regex con concordancia negativa (es decir, buscar cadena que _no coincida con regex)
- 15. RegEx para que una cadena NO contenga dos cadenas diferentes
- 16. Regex para que coincida con palabras de cierta longitud
- 17. Regex para que coincida con el espacio en blanco o el final de la cadena
- 18. Regex para que coincida con la frase exacta, nada antes o después de la frase
- 19. Regex y los dos puntos (:)
- 20. Multiline C# Regex para que coincida después de una línea en blanco
- 21. Regex: ¿cómo decir algo que NO coincida?
- 22. Regex para que coincida con el dominio simple
- 23. Regex para que coincida con algo que no sea una subcadena específica
- 24. expresión regex para que coincida con la consonante
- 25. Regex para que coincida con los espacios alfanuméricos
- 26. Regex para que coincida con tres palabras separadas por comas dos
- 27. Rubí Expresión regular para que coincida con una dirección URL
- 28. ¿Cuál es la expresión regular para que coincida con una cadena alfanumérica de 6 caracteres?
- 29. ¿Tiene Regex que ignore las nuevas líneas y solo coincida con una cadena grande?
- 30. mod_rewrite regex para que coincida solo si una determinada cadena NO existe
Nunca he usado esa sintaxis, interesante, algo para ver hoy :) – leppie
No puedo encontrar ninguna documentación sobre su construcción de expresiones regulares, ¿me pueden dar una referencia? – leppie
@leppie, actualizado con más información, pero debe continuar [regular-expressions.info] (http://www.regular-expressions.info/) hay mucha información sobre expresiones regulares allí. –