如何在Go语言中编写匹配最后一个单个空格的正则表达式?
Go语言匹配字符串最后一个单个空格的正则方案
场景1:匹配最后一个单词前的单个空格
如果你的需求是替换字符串最后一个单词前面的单个空格(即该空格后无连续空格,且紧跟到字符串结尾的非空格内容),可以使用以下正则:
\s(?!\s)(?=[^\s]+$)
\s:匹配单个空白字符(若仅需匹配普通空格,替换为即可)(?!\s):确保该空格后无其他空格,排除连续空格的情况(?=[^\s]+$):确保空格后跟着非空格字符直到字符串结尾
Go代码示例:
package main import ( "fmt" "regexp" ) func main() { input := "hello world go language" re := regexp.MustCompile(`\s(?!\s)(?=[^\s]+$)`) output := re.ReplaceAllString(input, "->") fmt.Println(output) // 输出:hello world go->language }
场景2:匹配字符串中最后出现的单个空格
如果需要匹配整个字符串中最后一个独立的单个空格(即该空格前后均无其他空格,不管后面是否有连续空格),可以使用贪婪匹配结合捕获组的正则:
^(.*)(?<!\s)\s(?!\s)(.*)$
^(.*):贪婪匹配开头到最后一个单个空格前的所有内容(?<!\s)\s(?!\s):匹配前后无空格的单个空格(.*)$:匹配该空格后的所有内容
Go代码示例:
package main import ( "fmt" "regexp" ) func main() { input := "a b c d" re := regexp.MustCompile(`^(.*)(?<!\s)\s(?!\s)(.*)$`) output := re.ReplaceAllString(input, "$1->$2") fmt.Println(output) // 输出:a b->c d }
注意事项
- 如果需要区分普通空格和其他空白字符(如制表符、换行),把正则中的
\s替换为普通空格即可 - 若字符串中不存在符合条件的单个空格,替换操作不会改变原字符串
内容的提问来源于stack exchange,提问作者Gervasius Twinklewinkleson
相关产品推荐
相关产品推荐

