你这个匹配出来的是全角的标点符号啊
时间: 2024-11-13 17:22:09 浏览: 4
javascript去除字符串中所有标点符号和提取纯文本的正则
您说得对,我在之前的描述中提到的是匹配半角标点符号,但实际上,Go语言默认的正则表达式`\p{P}`会匹配包括全角和半角在内的所有Unicode标点。如果你想要精确地匹配半角标点,需要调整模式。
为了区分半角和全角标点,可以利用Go内置的`unicode`包。这里是一个例子,它使用`utf8`库的`RuneWidth`函数来检查字符宽度,判断是否为半角标点:
```go
package main
import (
"fmt"
"regexp"
"unicode/utf8"
)
func isHalfWidth(r rune) bool {
return utf8.RuneWidth(r) == 1
}
func matchHalfWidthPunctuation(text string) []rune {
pattern := "[\x00-\x7F]"
re, _ := regexp.Compile(pattern) // 使用[]...匹配半角字符范围
var matches []rune
for _, r := range re.FindAllIndex(string(text), -1) {
if isHalfWidth(r[1]) {
matches = append(matches, text[r[0]:r[1]])
}
}
return matches
}
func main() {
text := "Hello, 世界! How are you? 😊"
halfWidthMatches := matchHalfWidthPunctuation(text)
fmt.Println("Half-width punctuation matches:", halfWidthMatches)
}
```
在这个示例中,我们使用了字符范围`[\x00-\x7F]`来匹配半角字符,并结合`isHalfWidth`函数过滤掉全角标点。结果将只包含半角标点。
阅读全文