正则表达式匹配Python中的“Chinese+Number”模式

2024-09-30 13:22:19 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python3.3中,我想匹配下面的模式,但它总是失败。在

摄氏零下253

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

^{pr2}$

它不排除除了数字以外的所有ascii码吗?在


Tags: ascii模式数字摄氏pr2
3条回答

您混淆了ASCII数字的十进制和十六进制值。\x转义序列表示十六进制转义,对于该转义,应使用所需的ASCII字符的十六进制值。在

参考ASCII表(http://www.asciitable.com/),范围应该是0到{},然后是{}到{},您的regex应该如下所示:

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

但是,上面的regex除了包含中文字符外,还包括其他字符(事实上,除了127个ASCII字符减去数字之外,它还包括所有字符)。在

不确定您将使用哪种语言执行此操作,但此regex在PHP中工作时using predefined Unicode scripts

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

同样,这可能更易于移植,因为并非所有regex实现都设置了预定义的Unicode脚本:

^{pr2}$

下面是一些在两个regex都已就绪的测试代码;注释其中一个或另一个以进行测试:

// 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
)

根据您使用的编程语言,您可以使用以下命令。在

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

\p{Han} matches characters in the Han script.
\p{N} matches any kind of numeric character in any script.

Live Demo

相关问题 更多 >

    热门问题