Regex 如何替换任何语言的所有非字母数字?
使用golang中的正则表达式,我想用Regex 如何替换任何语言的所有非字母数字?,regex,go,Regex,Go,使用golang中的正则表达式,我想用-替换任何语言的所有非字母数字字符,以便生成漂亮的URL: 是我尝试过的许多正则表达式之一: 包干管 import ( "fmt" "regexp" ) const sample = `سلام دنیا hello world 1 %^&` func main() { var re = regexp.MustCompile(`~[\p{L}0-9\s]+`) s := re.ReplaceAllString(sa
-
替换任何语言的所有非字母数字字符,以便生成漂亮的URL:
是我尝试过的许多正则表达式之一:
包干管
import (
"fmt"
"regexp"
)
const sample = `سلام دنیا hello world 1 %^&`
func main() {
var re = regexp.MustCompile(`~[\p{L}0-9\s]+`)
s := re.ReplaceAllString(sample, `-`)
fmt.Println(s)
}
输出应为:
hello-world-1
但它不起作用。如何修复它?为什么一开始就使用
~
?如果要使用否定集,请在括号内使用^
:[^…]
。此外,如果要替换空白,请不要在否定集定义中包含\s
:
[^\p{L}0-9]+
首先,您必须准确定义“任何语言的非字母数字”的含义。并非所有语言都使用字母书写,例如汉语。是否要将所有中文书写转换为
-
?或者你只是想保留未修饰的拉丁字母表?我不在乎中文/日文/韩文等等。与我有关的语言是欧洲语言、阿拉伯语和波斯语,它们要么是从左到右,要么是从右到左。正则表达式还应该将空格转换为-
,所以我要找的是[^\p{L}0-9\s]+[\040]
。请更新,我会接受。谢谢为什么排除集中没有空格的[^\p{L}0-9]+
呢?正如我所说的,我想把字符串变成slug,所以空格需要用-
替换。像这样:?我想我明白你的意思了,但我想我们可以在这里使用更简单的正则表达式:)对,这更优雅!