2008-10-08 11 views
7

Estoy tratando de encontrar el índice de una subcadena en una cadena que coincida con otra cadena en una cultura específica (proporcionada desde System.CultureInfo).Encontrar el final de una coincidencia de subcadena en .NET

Por ejemplo, la cadena "culo" coincide con la subcadena "aß" en "straße" bajo una cultura alemana.

puedo encontrar el índice del comienzo del partido usando

culture.CompareInfo.IndexOf(value, substring); 

pero sin recurrir a la fuerza bruta, es que hay una manera fácil de identificar que 2 personajes fueron emparejados y no 3?

+0

me di cuenta que mi pregunta es un duplicado de la suya: http://stackoverflow.com/questions/2835400/case-insenstive-string-replace-that-correctly-works-with-ligatures-like- ss – usr

Respuesta

0

¿Las expresiones regulares manejan esa distinción de ss vs. ß?

2

Si usa un grupo de captura, puede capturar la coincidencia exacta que se encontró, y de eso puede determinar cuántos caracteres coinciden.

Estoy un poco tímido ahora mismo para dar un ejemplo, por lo que espero que pueda resolverlo de mi descripción.

Quizás voy a enmendar mi respuesta más tarde.

de Dave

+0

No sabía que una expresión regular podría ejecutarse en una cultura particular: ¿cómo se hace? –

+0

La documentación indica que las operaciones que no distinguen entre mayúsculas y minúsculas son sensibles a la cultura de forma predeterminada. El Thread.CurrentCulture se usa en este punto. Pero aparentemente (en .NET 2.0) no coincide con "ß" con "ss", a pesar de que son los mismos en esa cultura. Así que mi anser no te ayuda. –

+0

Sé que he tenido problemas con la expresión regular de MS antes. Su coincidencia insensible a mayúsculas y minúsculas no puede coincidir con una k minúscula con un signo kelvin, por ejemplo (a pesar de que ambos tienen la misma mayúscula), y no trata con caracteres multibyte (que es otro requisito aquí). –

Cuestiones relacionadas