如何在正则表达式中检测带有标点符号的汉字?

cyt*_*nny 7 javascript php regex unicode

我注意到有关于如何用正则表达式检测汉字的问题。这些是我在 stackoverflow 上读到的一些问题:

php 检查字符串是否有中文字符

检测php字符串中的汉字

以及 stackoverflow 之外的一些文章:

http://www.regular-expressions.info/unicode.html - unicode 脚本

基本上他们建议使用\p{Han}+[\x{4e00}-\x{9fa5}]+.*来检测汉字。有没有办法检测中文标点符号?

中文标点符号的一些示例(但不是全部):???????????????

小智 5

[\u4e00-\u9fa5]在 VSCode 中适用于我,其他建议的解决方案则不起作用。我在这里偶然发现了解决方案,这是一个在线正则表达式解释器: http: //tool.chinaz.com/regex/


wp7*_*8de 2

我建议你看看Zhon来了解一下,这是一个 Python 库,它提供了中文文本处理中常用的常量。

\n\n

幸运的是,hanzi.py包含一个正则表达式的定义,它应该非常适合您的需求:

\n\n
#: A regular expression pattern for a Chinese sentence. A sentence is defined\n#: as a series of characters and non-stop punctuation marks followed by a stop\n#: and zero or more container-closing punctuation marks (e.g. apostrophe or brackets).\n\nsent = sentence = \'[{characters}{radicals}{non_stops}]*{sentence_end}\'.format(\n    characters=characters, radicals=radicals, non_stops=non_stops,\n    sentence_end=_sentence_end)\n
Run Code Online (Sandbox Code Playgroud)\n\n

上面的定义产生以下正则表达式*

\n\n
[\xe3\x80\x87\xe4\xb8\x80-\xe9\xbf\xbf\xe3\x90\x80-\xe4\xb6\xbf\xef\xa4\x80-\xef\xab\xbf----\xe2\xbc\x80-\xe2\xbf\x95\xe2\xba\x80-\xe2\xbb\xb3\xef\xbc\x82\xef\xbc\x83\xef\xbc\x84\xef\xbc\x85\xef\xbc\x86\xef\xbc\x87\xef\xbc\x88\xef\xbc\x89\xef\xbc\x8a\xef\xbc\x8b\xef\xbc\x8c\xef\xbc\x8d\xef\xbc\x8f\xef\xbc\x9a\xef\xbc\x9b\xef\xbc\x9c\xef\xbc\x9d\xef\xbc\x9e\xef\xbc\xa0\xef\xbc\xbb\xef\xbc\xbc\xef\xbc\xbd\xef\xbc\xbe\xef\xbc\xbf\xef\xbd\x80\xef\xbd\x9b\xef\xbd\x9c\xef\xbd\x9d\xef\xbd\x9e\xef\xbd\x9f\xef\xbd\xa0\xef\xbd\xa2\xef\xbd\xa3\xef\xbd\xa4\xe3\x80\x80\xe3\x80\x81\xe3\x80\x83\xe3\x80\x88\xe3\x80\x89\xe3\x80\x8a\xe3\x80\x8b\xe3\x80\x8c\xe3\x80\x8d\xe3\x80\x8e\xe3\x80\x8f\xe3\x80\x90\xe3\x80\x91\xe3\x80\x94\xe3\x80\x95\xe3\x80\x96\xe3\x80\x97\xe3\x80\x98\xe3\x80\x99\xe3\x80\x9a\xe3\x80\x9b\xe3\x80\x9c\xe3\x80\x9d\xe3\x80\x9e\xe3\x80\x9f\xe3\x80\xb0\xe3\x80\xbe\xe3\x80\xbf\xe2\x80\x93\xe2\x80\x94\xe2\x80\x98\xe2\x80\x99\xe2\x80\x9b\xe2\x80\x9c\xe2\x80\x9d\xe2\x80\x9e\xe2\x80\x9f\xe2\x80\xa6\xe2\x80\xa7\xef\xb9\x8f\xef\xb9\x91\xef\xb9\x94\xc2\xb7]*[\xef\xbc\x81\xef\xbc\x9f\xef\xbd\xa1\xe3\x80\x82][\xe3\x80\x8d\xef\xb9\x82\xe2\x80\x9d\xe3\x80\x8f\xe2\x80\x99\xe3\x80\x8b\xef\xbc\x89\xef\xbc\xbd\xef\xbd\x9d\xe3\x80\x95\xe3\x80\x97\xe3\x80\x99\xe3\x80\x9b\xe3\x80\x89\xe3\x80\x91]*\n
Run Code Online (Sandbox Code Playgroud)\n\n

代码示例

\n\n
preg_match_all(\'/[\xe3\x80\x87\xe4\xb8\x80-\xe9\xbf\xbf\xe3\x90\x80-\xe4\xb6\xbf\xef\xa4\x80-\xef\xab\xbf----\xe2\xbc\x80-\xe2\xbf\x95\xe2\xba\x80-\xe2\xbb\xb3\xef\xbc\x82\xef\xbc\x83\xef\xbc\x84\xef\xbc\x85\xef\xbc\x86\xef\xbc\x87\xef\xbc\x88\xef\xbc\x89\xef\xbc\x8a\xef\xbc\x8b\xef\xbc\x8c\xef\xbc\x8d\xef\xbc\x8f\xef\xbc\x9a\xef\xbc\x9b\xef\xbc\x9c\xef\xbc\x9d\xef\xbc\x9e\xef\xbc\xa0\xef\xbc\xbb\xef\xbc\xbc\xef\xbc\xbd\xef\xbc\xbe\xef\xbc\xbf\xef\xbd\x80\xef\xbd\x9b\xef\xbd\x9c\xef\xbd\x9d\xef\xbd\x9e\xef\xbd\x9f\xef\xbd\xa0\xef\xbd\xa2\xef\xbd\xa3\xef\xbd\xa4\xe3\x80\x80\xe3\x80\x81\xe3\x80\x83\xe3\x80\x88\xe3\x80\x89\xe3\x80\x8a\xe3\x80\x8b\xe3\x80\x8c\xe3\x80\x8d\xe3\x80\x8e\xe3\x80\x8f\xe3\x80\x90\xe3\x80\x91\xe3\x80\x94\xe3\x80\x95\xe3\x80\x96\xe3\x80\x97\xe3\x80\x98\xe3\x80\x99\xe3\x80\x9a\xe3\x80\x9b\xe3\x80\x9c\xe3\x80\x9d\xe3\x80\x9e\xe3\x80\x9f\xe3\x80\xb0\xe3\x80\xbe\xe3\x80\xbf\xe2\x80\x93\xe2\x80\x94\xe2\x80\x98\xe2\x80\x99\xe2\x80\x9b\xe2\x80\x9c\xe2\x80\x9d\xe2\x80\x9e\xe2\x80\x9f\xe2\x80\xa6\xe2\x80\xa7\xef\xb9\x8f\xef\xb9\x91\xef\xb9\x94\xc2\xb7]*[\xef\xbc\x81\xef\xbc\x9f\xef\xbd\xa1\xe3\x80\x82][\xe3\x80\x8d\xef\xb9\x82\xe2\x80\x9d\xe3\x80\x8f\xe2\x80\x99\xe3\x80\x8b\xef\xbc\x89\xef\xbc\xbd\xef\xbd\x9d\xe3\x80\x95\xe3\x80\x97\xe3\x80\x99\xe3\x80\x9b\xe3\x80\x89\xe3\x80\x91]*/\', "\xe6\x88\x91\xe7\x9a\x84\xe4\xb8\xad\xe6\x96\x87\xe4\xb8\x8d\xe5\xa5\xbd\xe3\x80\x82\xe6\x88\x91\xe6\x98\xaf\xe6\x84\x8f\xe5\xa4\xa7\xe5\x88\xa9\xe4\xba\xba\xe3\x80\x82\xe4\xbd\xa0\xe7\x9f\xa5\xe9\x81\x93\xe5\x90\x97\xef\xbc\x9f", $matches, PREG_SET_ORDER, 0);\nvar_dump($matches);\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果您更喜欢使用相关 CJK 表意文字 Unicode 块的字符代码范围,请参考我链接的 Python 源代码从下面的 Javascript 示例中获取它:

\n\n

\r\n
\r\n
#: A regular expression pattern for a Chinese sentence. A sentence is defined\n#: as a series of characters and non-stop punctuation marks followed by a stop\n#: and zero or more container-closing punctuation marks (e.g. apostrophe or brackets).\n\nsent = sentence = \'[{characters}{radicals}{non_stops}]*{sentence_end}\'.format(\n    characters=characters, radicals=radicals, non_stops=non_stops,\n    sentence_end=_sentence_end)\n
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n\n

PS:我也发现这个答案很有帮助。

\n