Board logo

标题: [文本处理] 批处理命令FINDSTR为何无法正确匹配中文关键词/字符串? [打印本页]

作者: oloyyy    时间: 2012-4-13 22:16     标题: 批处理命令FINDSTR为何无法正确匹配中文关键词/字符串?

本帖最后由 pcl_test 于 2017-4-6 08:30 编辑

楼主写一个统计病区用药的批时,发现:
1.findstr "片 粒" 无法实现匹配含"片"或"粒"的行,加/r开关后可实现,但仍不解其理。
2.使用findstr /r /c:"         [^        ]*粒"时,前处空处为制表符,发现"粒"会匹配"辛(",此处括号为中文括号。去掉/r时"粒"不会匹配"辛("但其中正则式不能用。怀疑是编码问题,于是用notepad++试了下,以UTF-8格式编码时,发现"辛"的右边与"("的左边的编码,同"粒"的编码。问如何解决。
对/r的作用似懂非懂,希望高手不吝赐教,楼主感激不尽!
PS:用findstr匹配中文真是相当的蛋疼
作者: CrLf    时间: 2012-4-13 22:24

本帖最后由 CrLf 于 2012-4-13 22:27 编辑

第一个问题,匹配多组宽字符时,findstr 本身有 bug,只能用 /r 或 /l 来强制修正或使用/c开关:
  1. findstr /c:"片" /c:"粒"
复制代码
第二个问题的原因是 findstr 匹配的是字节而非字符,试运行:
  1. echo 粒辛(>test.txt
  2. echo d^&echo q | debug test.txt
复制代码
你看到了什么?
粒的内码为 C1A3,而辛和为(的内码分别为 D0C1 与 A3A8,所以...
作者: gawk    时间: 2012-4-13 22:25

findstr "片 粒" 无法实现匹配含"片"或"粒"的行

可以这样:
  1. findstr "片.* 粒" a.txt
复制代码

作者: oloyyy    时间: 2012-4-13 22:37

大侠们真及时啊,先顶后看
作者: oloyyy    时间: 2012-4-13 22:46

谢谢版主,但第2个问题咋解决呢




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2