2008-10-08 8 views
7

J'essaie de trouver l'index d'une sous-chaîne dans une chaîne qui correspond à une autre chaîne sous une culture spécifique (fournie à partir d'un System.CultureInfo).Recherche de la fin d'une correspondance de sous-chaîne dans .NET

Par exemple, la chaîne "ass" correspond à la sous-chaîne "aß" dans "straße" sous une culture allemande.

je peux trouver l'indice du début du match à l'aide

culture.CompareInfo.IndexOf(value, substring); 

mais sans avoir recours à la force brutale, est-il un moyen facile d'identifier que 2 caractères ont été appariés, et non 3?

+0

Je réalise ma question est une copie de la vôtre: http://stackoverflow.com/questions/2835400/case-insenstive-string-replace-that-correctly-works-with-ligatures-like- ss – usr

Répondre

0

Est-ce que les expressions régulières gèrent cette distinction entre ss et ß?

2

Si vous utilisez un groupe de capture, vous pouvez capturer la correspondance exacte trouvée, et à partir de là, vous pouvez déterminer le nombre de caractères correspondants.

Je suis un peu stressé en ce moment pour donner un exemple, alors j'espère que vous pouvez le comprendre à partir de ma description.

Peut-être que je vais ammend ma réponse plus tard.

Dave

+0

Je ne savais pas qu'une expression régulière pouvait être utilisée dans une culture particulière - comment cela se fait-il? –

+0

La documentation indique que les opérations insensibles à la casse sont sensibles à la culture par défaut. Thread.CurrentCulture est utilisé à ce stade. Mais apparemment (sous .NET 2.0) il ne correspond pas à "ß" avec "ss", même si elles sont les mêmes sous cette culture. Donc, mon anser ne vous aide pas. –

+0

Je sais que j'ai déjà eu des problèmes avec l'expression régulière de MS. Son appariement insensible à la casse ne correspond pas à un k minuscule avec un signe kelvin par exemple (bien que les deux aient la même majuscule), et ne gère pas les caractères multi-octets (ce qui est une autre exigence ici). –

Questions connexes