但是这样就匹配到大写英文字母了
时间: 2024-11-13 08:41:46 浏览: 4
确实,正则表达式`\p{P}`不仅匹配半角标点,还包含全角和西文的大写字母,因为它们都被Unicode分类为标点。如果你想仅匹配半角标点而避开大写字母,你可以明确指定半角标点类别,例如`\p{Pf}`只匹配半角形式的标点符号。
以下是修改后的Go代码示例:
```go
import (
"fmt"
"regexp"
"unicode/utf8"
)
func isHalfWidth(r rune) bool {
return utf8.RuneWidth(r) == 1
}
func matchHalfWidthPunctuation(text string) []string {
pattern := `\p{Pf}`
re, err := regexp.Compile(pattern)
if err != nil {
fmt.Println("Error compiling pattern:", err)
return nil
}
var matches []string
for _, r := range text {
if unicode.IsPunct(r) && isHalfWidth(r) {
matches = append(matches, string(r))
}
}
return matches
}
func main() {
text := "Hello, 世界! How are you? 😊"
halfWidthMatches := matchHalfWidthPunctuation(text)
fmt.Println("Half-width punctuation matches:", halfWidthMatches)
}
```
这个版本的代码通过`isHalfWidth`函数检查每个字符是否是半宽,然后再应用正则表达式。这样只会匹配到半角标点,不会包括大写字母。
阅读全文