You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 11:46:01