为了账号安全,请及时绑定邮箱和手机立即绑定

一种正则表达式,用于制作具有单词边界的首字母缩略词并删除单词前面的字符

一种正则表达式,用于制作具有单词边界的首字母缩略词并删除单词前面的字符

Go
繁星coding 2022-09-19 17:45:51
转到版本go version go1.16.7 linux/amd64问题我正在经历一个关于创建首字母缩略词的练习,我选择用正则表达式来做。给我的一些测试用例如下:    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"下面的代码能够通过许多简单的测试,如果第一个字母是大写的,那么提取该字母并从中制作一个首字母缩略词 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)正则表达式101 儿童游乐场链接到正则表达式101中的游乐场问题我无法弄清楚如何仅编译 for 测试用例并在测试用例中获取 。HCHalley's CometNThe Road _Not_ Taken我必须保留小写字符的原因之一是因为大小写,也因为某些测试用例中的其他小写字符[a-z]Complementary metal-oxide semiconductor我实际上可以删除诸如正则表达式编译之类的字符,但我认为这不会使我的函数更加通用(而是通过测试)-_我想知道如何删除字符,以使首字母缩略词功能更强大?'_
查看完整描述

1 回答

?
回首忆惘然

TA贡献1847条经验 获得超11个赞

您可以使用


// 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 演示详细信息

  • \w'\w- 单词字符, , 单词字符 (为避免在单词字符之间匹配,如果您有后续匹配的问题,请替换为''\b'\w)

  • |- 或

  • (?:_|\b)- 或字边界_

  • ([A-Za-z])- 组 1:ASCII 字母(用于匹配任何统一码字母)。\p{L}


查看完整回答
反对 回复 2022-09-19
  • 1 回答
  • 0 关注
  • 114 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号