Go? Kullanarak belirtilen UTF8 kodlanmış dizesindeki tüm aksanları nasıl silebilirim? Örneğin. "žůžo"
dizgisini dönüştürün =>"zuzo"
. Standart bir yol var mı?Git'ü kullanarak diacritics'i kaldırın Git
cevap
Text normalization in Go'da açıklanan kitaplıkları kullanabilirsiniz.
farklı karakterin dizeleri karşılaştırmak için internet standardı "PRECIS" denir kümelerini(Hazırlık, İcra:
// Example derived from: http://blog.golang.org/normalization
package main
import (
"fmt"
"unicode"
"golang.org/x/text/transform"
"golang.org/x/text/unicode/norm"
)
func isMn(r rune) bool {
return unicode.Is(unicode.Mn, r) // Mn: nonspacing marks
}
func main() {
t := transform.Chain(norm.NFD, transform.RemoveFunc(isMn), norm.NFC)
result, _, _ := transform.String(t, "žůžo")
fmt.Println(result)
}
mevcut Yanıta biraz genişletmek için: Burada
bu kütüphanelerin bir uygulama var ve Uygulama Protokollerinde Uluslararası Dizelerin Karşılaştırılması) ve RFC7564 sayılı belgede belgelenmiştir. Ayrıca golang.org/x/text/secure/precis adresinde bir Go uygulaması da vardır.Standart profillerin hiçbiri istediğinizi yapmaz, ancak yeni bir profil tanımlamak oldukça doğru olur. Unicode Normalizasyon Formu D'yi ("Ayrıştırma" için "D", yani vurguların ayrılacağı ve kendi birleştirme karakterleri olduğu) uygulamak ve sonra ek eşleme kuralının parçası olarak herhangi bir birleştirme karakterini kaldırmak ve sonra yeniden oluşturmak istiyorsunuz. normalleşme kuralı ile. Böyle bir şey:
package main
import (
"fmt"
"unicode"
"golang.org/x/text/secure/precis"
"golang.org/x/text/transform"
"golang.org/x/text/unicode/norm"
)
func main() {
loosecompare := precis.NewIdentifier(
precis.AdditionalMapping(func() transform.Transformer {
return transform.Chain(norm.NFD, transform.RemoveFunc(func(r rune) bool {
return unicode.Is(unicode.Mn, r)
}))
}),
precis.Norm(norm.NFC), // This is the default; be explicit though.
)
p, _ := loosecompare.String("žůžo")
fmt.Println(p, loosecompare.Compare("žůžo", "zuzo"))
// Prints "zuzo true"
}
Bu daha sonra daha fazla seçenekleri ile karşılaştırma genişletmek sağlar (örneğin genişlik haritalama, vaka haritalama, vb.) Bu aksan çıkarmadan ne aslında neredeyse hiç olduğunu belirterek, aynı zamanda değer
bunun gibi dizeleri karşılaştırırken yapmak istiyorum, ancak, kullanım durumunuzu bilmeden, aslında projeniz hakkında bu iddiayı yapamıyorum. Precis profillerin çoğalmasını önlemek için mümkün olan yerlerde mevcut profillerden birini kullanmak iyidir. Ayrıca, örnek profili optimize etmek için çaba sarf edilmediğini de unutmayın.
- 1. Git filtre dalında çok sayıda dosyayı kaldırın
- 2. Git commit için tüm dosyaları kaldırın.
- 3. git submodule'ı kaldırın, ancak dosyaları saklayın
- 4. Git - yapılandırma dosyasını kaldırın ve dışarıda bırakın
- 5. Jquery'yi kullanarak CSS özniteliğini kaldırın
- 6. Javascript kullanarak URL'den parametreyi kaldırın
- 7. git merge vs rebase kullanarak git svn
- 8. js'yi kullanarak bir html düğmesini kaldırın
- 9. C# kullanarak Excel dosyasından meta verileri kaldırın.
- 10. Bir daldan eski bir Git işlemini ters yama kullanmadan kaldırın.
- 11. Git deposundan uzantıya sahip tüm dosyaları kaldırın ve yok sayın
- 12. Dosyaları github adresinden kaldırın
- 13. Git değişikliklerimi kullanarak çakışmaları çözme
- 14. Windows'da Git with Jenkins'i kullanarak
- 15. Java git istemcisi jgit kullanarak
- 16. Arama git Komutları Regex Kullanarak
- 17. Mac için GitHub'u kullanarak git git --amend "nasıl yapılır
- 18. Laravel 5.1 denetleyiciyi kaldırın
- 19. css hover stilini kaldırın
- 20. Bir querystring değeri kaldırın
- 21. jQuery'yi kullanarak dördüncü VISIBLE öğesinin sağ kenar boşluğunu kaldırın.
- 22. Gereksiz öznitelikleri JavaScript'i kullanarak html etiketinden kaldırın. RegEx
- 23. Java ile Google Appengine'i kullanarak .html uzantısını kaldırın.
- 24. C# .net kullanarak programlı bir .inf sürücüsünü yükleyin/kaldırın.
- 25. Eksen işaretlerini kaldırın ancak Matplolib/ggplot stilini kullanarak ızgarayı tutun
- 26. Bootstrap 3: Açısal js kullanarak sekmesinin seçimini kaldırın
- 27. Google Apps Komut Dosyası - .replace yöntemini kullanarak alanları kaldırın
- 28. Git ve Git İçindekiler bölümüne git Mergetool
- 29. git ve curl komut satırını kullanarak
- 30. Gitmek için kdiff3 işlevini kullanarak git…
Bu harika - go.text'in Unicode'u eğitmek için bazı meraklı araçlarının olduğunu ancak bunun gibi pratik bir kullanım görmediğinin farkındaydı. Blog’dan bazı pratik şeyleri kaçırmışım gibi görünüyor. : P – twotwotwo
Bu, yalnızca bir unicode ayrışması olan karakterler için çalışır. Örneğin, karakter Ł (inme ile L) değiştirilmeyecektir (bu nedenle "AŁA" "AŁA" ye dönüştürülecektir), sezgisel olarak "L" ye çevrilmelidir (böylece "AŁA" => "ALA"). –