在Python中匹配“汉字+数字”模式的正则表达式

3 投票
4 回答
2571 浏览
提问于 2025-04-18 11:49

在Python 3.3中,我想匹配下面的模式,但总是失败。

摄氏零下253

我用了下面的正则表达式。

[^\x00-\x47\x58-\x7F]+

这个正则表达式难道不是排除了所有的ASCII字符,只留下数字吗?

4 个回答

0

正则表达式有一些扩展功能,比如可以使用命名字符组。

你可以使用以下的组:

\p{Han} 表示中文汉字。

那么正则表达式就是:

[\p{Han}]+[0-9]+
1

不太确定你会用什么语言来做这个,不过这个正则表达式在PHP中可以用,当你使用预定义的Unicode脚本时:

/(?:[\p{Han}0-9]+)/simu

同样的,这个可能更通用,因为并不是所有的正则表达式实现都有预定义的Unicode脚本:

/[\x{4e00}-\x{9fa5}0-9]+/simu

这里有一些测试代码,里面包含了两个正则表达式;你可以注释掉其中一个来进行测试:

// Set the test string.
$string = '摄氏零下253';

// Run it through preg_match.
// $regex = "/(?:[\p{Han}0-9]+)/simu";
$regex = "/[\x{4e00}-\x{9fa5}0-9]+/simu";
preg_match($regex, $string, $matches);

// Send a UTF-8 header out so it looks nice.
header('Content-Type: text/html; charset=UTF-8');

// Dump the matches.
echo '<pre>';
print_r($matches);
echo '</pre>';

以下是这个脚本的结果:

Array
(
    [0] => 摄氏零下253
)
9

根据你使用的编程语言,你可以使用以下内容。

[\p{Han}\p{N}]+

\p{Han} 用来匹配汉字。
\p{N} 用来匹配任何类型的数字字符,不管是什么文字。

在线演示

3

你把十进制和十六进制的ASCII数字搞混了。\x这个转义序列表示的是十六进制转义,你需要用到的就是你想要的ASCII字符的十六进制值。

根据ASCII表(可以查看这个链接:http://www.asciitable.com/),范围应该是02F,然后是3A7F,你的正则表达式应该像这样:

[^\x00-\x2F\x3A-\x7F]+

不过,上面的正则表达式包含了除了中文以外的其他字符(实际上,它包含了除了127个ASCII字符和数字以外的所有东西)。

撰写回答