在Python3.3中,我想匹配下面的模式,但是它一直失败。
摄氏零下253我用了下面的正则表达式。
[^\x00-\x47\x58-\x7F]+它不排除除了数字以外的所有ascii吗?
发布于 2014-07-02 03:40:06
您正在混合ASCII数字的十进制和十六进制值。\x转义序列表示十六进制转义,为此您应该使用所需的ASCII字符的十六进制值。
参考ASCII表(http://www.asciitable.com/),范围应该是0到2F,然后是3A到7F,您的正则表达式应该如下所示:
[^\x00-\x2F\x3A-\x7F]+然而,上面的正则表达式除了包含中文字符外,还包括所有字符(事实上,它包括除127个ASCII字符减去数字之外的所有内容)。
发布于 2014-07-02 03:46:58
根据您正在使用的编程语言,您可以使用以下代码。
[\p{Han}\p{N}]+
\p{Han}与汉字脚本中的字符匹配。\p{N}匹配任何脚本中的任何类型的数字字符。
现场演示
发布于 2014-07-02 03:47:32
不确定您使用的是哪种语言,但是当使用预定义的Unicode脚本时这个正则表达式在PHP中工作。
/(?:[\p{Han}0-9]+)/simu由于并非所有regex的实现都设置了预定义的Unicode脚本,因此它可能更易于移植:
/[\x{4e00}-\x{9fa5}0-9]+/simu下面是两个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
)https://stackoverflow.com/questions/24522394
复制相似问题