gpt4 book ai didi

regex - golang正则表达式替换单个数字

转载 作者:IT王子 更新时间:2023-10-29 01:38:54 25 4
gpt4 key购买 nike

我正在尝试替换单个数字,前提是它们不伴随单词字符。例如

[*:*:1] a2b*d 3n 4q 测试 5 测试 6

应该改成

[*:*:*] a2b*d 3n 4q test * test *

在上面的列表中,数字 1、5 和 6 已被替换为 *,但是 2、3 和 4 没有被替换,因为它们伴随着一个单词字符。

下面的代码有效,但部分有效

https://play.golang.org/p/OC6bk4PLyq

s := "[*:*:1] a2b*d 3n 4q test 5 test 6"
re := regexp.MustCompile("[^0-9A-Za-z_][0-9]+[^0-9A-Za-z_]")
s = re.ReplaceAllString(s, "*")
fmt.Println(s) // Prints - [*:** a2b*d 3n 4q test*test 6

在这里,我希望保留第一个单词中的:],并保留5周围的空格。 6 也没有被替换。

关于如何在 Go 中实现这一点的任何建议。

最佳答案

使用以下正则表达式:

([^\w.]|^)[0-9]([^\w.]|\.(?:\D|$)|$)

并用 $1*$2 替换模式替换。

详细信息:

  • ([^\w.]|^) - 第 1 组:不是点或单词的字符 char (\w = [ A-Za-z0-9_]) 或字符串开头 (^)
  • [0-9] - 1 位数字
  • ([^\w.]|\.(?:\D|$)|$) - 第 2 组:点以外的字符或单词字符 ([ ^\w.]),或 . 后跟非数字或字符串结尾 (\.(?:\D|$))或字符串结尾 ($)

替换模式中的 $1 将第 1 组内容重新插入到结果中,$2 对第 2 组内容执行相同操作。

参见 regex demo和一个 Go demo :

package main

import (
"fmt"
"regexp"
)

func main() {
s := "[*:*:1] a2b*d 3.5 5, 7. 3n 4q test 5 test 6"
re := regexp.MustCompile(`([^\w.]|^)[0-9]([^\w.]|\.(?:\D|$)|$)`)
s = re.ReplaceAllString(s, "$1*$2")
fmt.Println(s)
}

更新:要同时删除用 1 个字符分隔的 1 位整数,请使用循环检查是否仍然存在匹配项,并替换直到没有匹配项。将 s = re.ReplaceAllString(s, "$1*$2") 替换为:

for re.MatchString(s)  {
s = re.ReplaceAllString(s, "$1*$2")
}

参见 this Go demo .

关于regex - golang正则表达式替换单个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40908634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com