regex 获取字符串中的中文标点符号

lnxxn5zx  于 2023-04-22  发布在  其他
关注(0)|答案(1)|浏览(415)

答案就在

我已经接近我需要的东西了:获取字符串中的所有中文标点符号。
Intl.SegmenterString.prototype.split(" ")好得多
但有一个问题/\p{P}/u.test(segment.segment)测试所有的标点符号,而不仅仅是中文标点符号,所以我得到了英语标点符号,如撇号,逗号,问号和句号。
我希望我不需要解析到Chinese punctuation Unicode range?中的答案。它太复杂了。根据这个关于Chinese punctuation的维基,只有大约20个。
有什么简单的方法吗?

const str = "你好,让我们试试这个分词效果,你说怎么样?Let's try Intl.Segmenter, should we ?"
let segmenterZH = new Intl.Segmenter('zh', { granularity: 'grapheme' })
let segments = segmenterZH.segment(str)
for (let segment of segments) {
  if (/\p{P}/u.test(segment.segment)) {
    console.log(`${segment.index}:${segment.segment}`)
  }
}
mwecs4sa

mwecs4sa1#

如果您想匹配属于CJK Symbols and Punctuation集或Halfwidth and Fullwidth Forms字符集的 punctuation proper,可以使用

/\p{P}(?<=[\u3000-\u303F\uFF00-\uFFEF])/u

何处

  • \p{P}-匹配任何标点符号字符(即它不匹配数学符号,如+=等)
  • (?<=[\u3000-\u303F\uFF00-\uFFEF])-一个正向后查找,要求\p{P}匹配的字符在\u3000-\u303F(CJK符号和标点符号)或\uFF00-\uFFEF(半角和全角形式)范围内。

请看下面的JavaScript演示:

const str = "你好,让我们试试这个分词效果,你说怎么样?Let's try Intl.Segmenter, should we ?"
let segmenterZH = new Intl.Segmenter('zh', { granularity: 'grapheme' })
let segments = segmenterZH.segment(str)
for (let segment of segments) {
  if (/\p{P}(?<=[\u3000-\u303F\uFF00-\uFFEF])/u.test(segment.segment)) {
    console.log(`${segment.index}:${segment.segment}`)
  }
}

输出:

2:,
14:,
20:?

相关问题