楼主: 乐天天12300
2164 8

[问答] SAS 正则表达式为什么不支持[\u4e00-\u9fa5]匹配中文字符串 [推广有奖]

  • 0关注
  • 3粉丝

已卖:352份资源

讲师

96%

还不是VIP/贵宾

-

威望
0
论坛币
4875 个
通用积分
360.1222
学术水平
60 点
热心指数
70 点
信用等级
42 点
经验
9962 点
帖子
243
精华
0
在线时间
1004 小时
注册时间
2016-11-28
最后登录
2025-5-3

楼主
乐天天12300 发表于 2022-7-24 11:24:45 |AI写论文
30论坛币
data test;
a="owjgo我";
re=prxparse("/[\u4e00-\u9fa5]/");
b=prxmatch(re,a);
put b;
run;


最佳答案

whymath 查看完整内容

今天翻书看到,想起你提的这个问题。 ——K. Matthew Windham, Introduction to Regular Expressions in SAS®, P99https://doc.lagout.org/programmation/Regular%20Expressions/Introduction%20to%20Regular%20Expressions%20in%20SAS%20%5bWindham%202014-11-18%5d.pdf
关键词:正则表达式 字符串 表达式 PrxMatch RXPARSE

沙发
whymath 发表于 2022-7-24 11:24:46
今天翻书看到,想起你提的这个问题。
The PRX functions use a modified version of Perl 5.6.1 to perform regular expression compilation and matching. Perl is compiled into a library for use with SAS.
The modified version of Perl [RegEx] does not support the following items:
...
· Unicode pattern matching
...
——K. Matthew Windham, Introduction to Regular Expressions in SAS®, P99https://doc.lagout.org/programmation/Regular%20Expressions/Introduction%20to%20Regular%20Expressions%20in%20SAS%20%5bWindham%202014-11-18%5d.pdf

查看我的精华帖:免费的 SAS 软件

藤椅
whymath 发表于 2023-2-6 15:54:58
好奇怪,你看到的时间是这样的吗? 1.png
查看我的精华帖:免费的 SAS 软件

板凳
乐天天12300 发表于 2023-2-6 16:25:11
whymath 发表于 2023-2-6 15:54
好奇怪,你看到的时间是这样的吗?
是的,估计网站有BUG

报纸
jg.sas 发表于 2023-2-21 17:31:52
[\x80-\xff]或者[一-龥]
已有 1 人评分论坛币 收起 理由
乐天天12300 + 5 精彩帖子

总评分: 论坛币 + 5   查看全部评分

地板
whymath 发表于 2023-2-22 22:33:16
jg.sas 发表于 2023-2-21 17:31
[\x80-\xff]或者[一-龥]
我用这里(https://bbs.pinggu.org/thread-11289025-1-1.html)的数据试了一下,并不总是对的。

7
jg.sas 发表于 2023-2-28 15:29:18
whymath 发表于 2023-2-22 22:33
我用这里(https://bbs.pinggu.org/thread-11289025-1-1.html)的数据试了一下,并不总是对的。
GBK 也是双字节编码,为了向下兼容 GB2312, GBK 使用了 GB2312 没有用到的编码区域,总的编码范围是: 第一个字节 0x81–0xFE,第二个字节 0x40–0xFE
你说的对,应该是错误的,在UTF8系统里中文应该是下面的三个十六进制的组合
字符UTF-8编码GBK编码
0xe4, 0xb8, 0x800xd2, 0xbb
..........

0xe9, 0xbe, 0xa50xfd, 0x9b

8
jg.sas 发表于 2023-3-6 16:44:31
jg.sas 发表于 2023-2-28 15:29
GBK 也是双字节编码,为了向下兼容 GB2312, GBK 使用了 GB2312 没有用到的编码区域,总的编码范围是: 第 ...
字符        UTF-8编码                        GBK编码
一        0xe4, 0xb8, 0x80        0xd2, 0xbb

..........

龥        0xe9, 0xbe, 0xa5        0xfd, 0x9b

9
赵安豆 发表于 2024-7-10 17:53:42
在SAS中,正则表达式的Unicode支持是有限的。尽管SAS 9.3及更高版本开始支持Unicode字符集,但是`\u`语法用于表示Unicode字符并不直接被所有字符串和正则表达式函数完全支持。

当你尝试使用`[\u4e00-\u9fa5]`来匹配中文字符时,你实际上是在试图定义一个从Unicode值为`\u4e00`到`\u9fa5`范围内的字符类。在某些语言(如Perl或Java)中,这可以正常工作,但在SAS里却不行。

SAS中的正则表达式解析器可能无法正确识别`\u`后的四位十六进制数作为Unicode代码点。因此,在你的例子中,SAS可能会将`[\u4e00-\u9fa5]`解释为一系列的字面字符而不是一个有效的Unicode范围。

为了在SAS中匹配中文字符,你可以尝试使用更直接的方法,例如通过转换字符串到UTF-8编码然后使用特定于SAS的函数或方法来处理。但是最简单的方式可能还是使用`prxparse`和`prxmatch`时避免使用`\u`语法,并寻找其他替代策略。

如果你需要在SAS中进行复杂的Unicode文本处理,你可能需要考虑将数据导出到支持更广泛正则表达式功能的环境(如Python或R),在那里你可以利用成熟的文本处理库。然后根据需要再将结果导入SAS。不过对于基本的中文字符匹配需求,有时直接用`scan`, `compress`, 或者其他字符串函数可能也会足够。

在较新版本的SAS中(如SAS Viya),Unicode支持和正则表达式的功能可能会更完善一些,所以升级你的SAS环境也是一个值得考虑的选择。但即便是这样,在编写涉及复杂Unicode字符的正则表达式时,还是需要仔细测试以确保它们按预期工作。

此文本由CAIE学术大模型生成,添加下方二维码,优先体验功能试用



您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-4 08:51