2008-10-08 17 views
7

Próbuję znaleźć indeks podciągu w ciągu pasującym do innego ciągu pod określoną kulturą (dostarczoną z System.CultureInfo).Znajdowanie końca dopasowania podciągu w .NET

Na przykład ciąg "ass" odpowiada podciąganiu "aß" na "straße" w kulturze niemieckiej.

mogę znaleźć indeks rozpoczęciem meczu wykorzystaniem

culture.CompareInfo.IndexOf(value, substring); 

ale bez uciekania się do brutalnej siły, to istnieje prosty sposób identyfikowania, że ​​2 znaków zostały dopasowane, a nie 3?

+0

Zdaję sobie sprawę, moje pytanie jest duplikatem Twoja: http://stackoverflow.com/questions/2835400/case-insenstive-string-replace-that-correctly-works-with-ligatures-like- ss – usr

Odpowiedz

0

Czy wyrażenia regularne obsługują to rozróżnienie ss vs. ß?

2

Jeśli używasz grupy przechwytywania, możesz przechwycić dokładne dopasowanie, które zostało znalezione, i od którego możesz określić, ile znaków zostało dopasowanych.

Jestem trochę przytłoczony teraz, aby dać przykład, więc mam nadzieję, że możesz to zrozumieć z mojego opisu.

Być może odpowiem później na moją odpowiedź.

Dave

+0

Nie wiedziałem, że wyrażenie regularne może być uruchamiane w określonej kulturze - jak to się dzieje? –

+0

W dokumentacji stwierdza się, że operacje niewrażliwe na wielkość znaków są domyślnie wrażliwe na kulturę. Na tym etapie jest używany wątek.CurrentCulture. Ale widocznie (pod .NET 2.0) nie pasuje do "ß" z "ss", mimo że są one takie same w tej kulturze. Więc mój anser ci nie pomaga. –

+0

Wiem, że już wcześniej doświadczyłem problemów z regexem MS. Jego dopasowanie do wielkości liter nie jest zgodne z małą literą k, na przykład znakiem kelwin (mimo że oba mają taką samą wielką literę) i nie radzi sobie ze znakami wielobajtowymi (co jest tutaj kolejnym wymaganiem). –