亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

刪除所有特殊字符,但不刪除重音字母

刪除所有特殊字符,但不刪除重音字母

Go
楊魅力 2022-10-17 19:28:41
我需要從字符串中刪除 GO 中除重音字母以外的所有符號。我的代碼改為刪除所有包含重音字母的符號:str := "cafè!?"reg, err := regexp.Compile(`[^\w]`)str := reg.ReplaceAllString(str, " ")我期望以下輸出:cafè但是我的代碼的輸出是:caf我想包括 è、é、à、ò、ì (當然還有從 a 到 z 的所有字母和從 0 到 9 的數字)我能怎么做?謝謝你的幫助
查看完整描述

3 回答

?
慕尼黑的夜晚無繁華

TA貢獻1864條經驗 獲得超6個贊

要包含 è、é、à、ò、ì,只需將它們添加到正則表達式:[^\wèéàòìèéàòì]

您也可以使用[^\d\p{Latin}],但這會匹配更多字符。

\d用于數字,\p{Latin}是所有拉丁字符的 Unicode 類,包括所有變音符號。

例如:

re := regexp.MustCompile(`[^\d\p{Latin}]`)
fmt.Println(re.ReplaceAllString(`Test123é?à-???Бла通用`, ""))

將打?。?/p>

Test123é?à???


查看完整回答
反對 回復 2022-10-17
?
泛舟湖上清波郎朗

TA貢獻1818條經驗 獲得超3個贊

這里所有的“特殊”字符都是標點符號(我假設也是符號)字符,所以使用

[\p{P}\p{S}]+

如果要刪除任何字符但需要使用的任何字母

\P{L}+

請參閱正則表達式演示 #1正則表達式演示 #2。這里,

  • \p{P}匹配任何適當的標點符號(如逗號、點)

  • \p{S}符號,如數學等符號

  • \P{L}- Unicode 字母以外的任何字符。


查看完整回答
反對 回復 2022-10-17
?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

您可以使用 Unicode 文本分割庫來迭代字素簇,并檢查每個字素簇中的第一個符文是否具有正確的類別(字母或數字)。


import (

    "strings"

    "unicode"


    "github.com/rivo/uniseg"

)


func stripSpecial(s string) string {

    var b strings.Builder

    gr := uniseg.NewGraphemes(s)

    for gr.Next() {

        r := gr.Runes()[0]

        if unicode.IsLetter(r) || unicode.IsDigit(r) {

            b.WriteString(gr.Str())

        }

    }

    return b.String()

}

該代碼首先將字符串分解為字形簇,


"cafè!?" -> ["c", "a", "f", "è", "!", "?"]

每個字素簇可能包含多個 Unicode 代碼點。第一個代碼點確定字符的類型,其余代碼點(如果有)是重音符號或其他修飾符。所以我們過濾和連接:


["c", "a", "f", "è"] -> "cafè"

這將通過任何重音或未重音的字母和數字,無論它們是如何歸一化的,無論是什么口音(包括Z???????????????????????????G????????????O??????????????????文本)。它將排除某些字符,例如零寬度連接符,這會導致某些語言中的單詞被破壞......所以如果您關心國際受眾,您可能需要查看您的受眾是否使用零寬度連接符。因此,這將破壞某些腳本,例如梵文。


查看完整回答
反對 回復 2022-10-17
  • 3 回答
  • 0 關注
  • 148 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號