轉(zhuǎn)到版本go version go1.16.7 linux/amd64問題我正在經(jīng)歷一個(gè)關(guān)于創(chuàng)建首字母縮略詞的練習(xí),我選擇用正則表達(dá)式來做。給我的一些測試用例如下: input: "Ruby on Rails", expected: "ROR" input: "GNU Image Manipulation Program", expected: "GIMP" input: "Complementary metal-oxide semiconductor", expected: "CMOS" input: "Something - I made up from thin air", expected: "SIMUFTA" input: "Halley's Comet", expected: "HC" input: "The Road _Not_ Taken", expected: "TRNT"下面的代碼能夠通過許多簡單的測試,如果第一個(gè)字母是大寫的,那么提取該字母并從中制作一個(gè)首字母縮略詞 Portable Network Graphics -> PNG法典// Package acronym creates an acronym based on Capitalized Letterspackage acronymimport ( "regexp" "strings")// Abbreviate: creates an acronym for a full form stringfunc Abbreviate(s string) string { re := regexp.MustCompile(`\b[A-Za-z]`) abbreviation := strings.Join(re.FindAllString(s, -1), "") return strings.ToUpper(abbreviation)}我唯一失敗的測試是=== RUN TestAcronym acronym_test.go:11: Acronym test [Halley's Comet], expected [HC], actual [HSC] acronym_test.go:11: Acronym test [The Road _Not_ Taken], expected [TRNT], actual [TRT]--- FAIL: TestAcronym (0.00s)正則表達(dá)式101 兒童游樂場鏈接到正則表達(dá)式101中的游樂場問題我無法弄清楚如何僅編譯 for 測試用例并在測試用例中獲取 。HCHalley's CometNThe Road _Not_ Taken我必須保留小寫字符的原因之一是因?yàn)榇笮懀惨驗(yàn)槟承y試用例中的其他小寫字符[a-z]Complementary metal-oxide semiconductor我實(shí)際上可以刪除諸如正則表達(dá)式編譯之類的字符,但我認(rèn)為這不會使我的函數(shù)更加通用(而是通過測試)-_我想知道如何刪除字符,以使首字母縮略詞功能更強(qiáng)大?'_
1 回答

回首憶惘然
TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超11個(gè)贊
您可以使用
// Abbreviate: creates an acronym for a full form string
func Abbreviate(s string) string {
var abbreviation = ""
re := regexp.MustCompile(`\w'\w|(?:_|\b)([A-Za-z])`)
for _, match := range re.FindAllStringSubmatch(s, -1) {
abbreviation = abbreviation + match[1]
}
return strings.ToUpper(abbreviation)
}
請參閱 Go 演示。詳細(xì)信息:
\w'\w
- 單詞字符, , 單詞字符 (為避免在單詞字符之間匹配,如果您有后續(xù)匹配的問題,請?zhí)鎿Q為'
'
\b'\w
)|
- 或(?:_|\b)
- 或字邊界_
([A-Za-z])
- 組 1:ASCII 字母(用于匹配任何統(tǒng)一碼字母)。\p{L}
- 1 回答
- 0 關(guān)注
- 97 瀏覽
添加回答
舉報(bào)
0/150
提交
取消