无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
12
返回列表 发新帖
楼主: yjqd
打印 上一主题 下一主题

[求助] 命令如何查找有中文字符的行

  [复制链接]
31#
发表于 2022-5-20 13:50:46 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

32#
发表于 2022-5-20 13:55:23 | 只看该作者
bjay2008xmy 发表于 2022-5-20 13:50
那有没有应用在此例中专门识别中文的正则表达式

中文数量显然远大于英文,用排除法省事。按3楼提示操作方便。
你要提供原始数据和结果数据以附件形式发上来试,因为已经变动过样本数据,不方便确定,他要大写还是小写了。

点评

没有通用的吗,我还以为有通用的不仅限于此例样本的正则表达式  详情 回复 发表于 2022-5-20 13:59
回复

使用道具 举报

33#
发表于 2022-5-20 13:59:46 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

34#
发表于 2022-5-20 14:11:18 | 只看该作者
bjay2008xmy 发表于 2022-5-20 13:59
没有通用的吗,我还以为有通用的不仅限于此例样本的正则表达式

findstr /rc:"[^'-Z]"

任何东西都离不了环境。

点评

这确实是个好办法,解决问题的思路要比方法更重要  详情 回复 发表于 2022-5-20 21:51
回复

使用道具 举报

35#
发表于 2022-5-20 19:54:37 来自手机 | 只看该作者
能搞定吗?需要整理直播列表用。
回复

使用道具 举报

36#
发表于 2022-5-20 21:51:50 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

37#
发表于 2022-5-21 07:49:32 | 只看该作者
bjay2008xmy 发表于 2022-5-20 21:51
这确实是个好办法,解决问题的思路要比方法更重要

findstr "[^'-Z]"

findstr里字符的顺序不是标准的ascii,你可以搞个脚本将顺序搞出来比较。

以前叫纯中文,现在叫全角的,里面也包含数字英文符号制表符等,是否认为是中文得看你的需求,东西得靠自己调试。
回复

使用道具 举报

38#
发表于 2022-5-21 10:08:58 | 只看该作者
还是要搞个 非中文的 字符集,做排除用。 比如英文的字符集

点评

也可试下非排除法,判断字符是否 >=啊  详情 回复 发表于 2022-5-21 20:45
我曾经就有个奇葩的想法,把GBK中的所有中文相关字符都弄到一个记事本中用来匹配。。。  详情 回复 发表于 2022-5-21 18:19
回复

使用道具 举报

39#
发表于 2022-5-21 18:19:35 来自手机 | 只看该作者
dos时代菜鸟 发表于 2022-5-21 10:08
还是要搞个 非中文的 字符集,做排除用。 比如英文的字符集

我曾经就有个奇葩的想法,把GBK中的所有中文相关字符都弄到一个记事本中用来匹配。。。
回复

使用道具 举报

40#
发表于 2022-5-21 18:42:09 来自手机 | 只看该作者
简体转繁体就是吧,常用字对应。
回复

使用道具 举报

41#
发表于 2022-5-21 20:45:23 | 只看该作者
dos时代菜鸟 发表于 2022-5-21 10:08
还是要搞个 非中文的 字符集,做排除用。 比如英文的字符集

也可试下非排除法,判断字符是否 >=啊 <=齄

点评

这也是个思路  详情 回复 发表于 2022-5-21 22:05
回复

使用道具 举报

42#
发表于 2022-5-21 22:05:02 | 只看该作者
本帖最后由 dos时代菜鸟 于 2022-5-21 22:26 编辑
szwp 发表于 2022-5-21 20:45
也可试下非排除法,判断字符是否 >=啊

这也是个思路

  1.     @echo off
  2.     setlocal ENABLEDELAYEDEXPANSION
  3.     set file1=test.txt
  4.     for /f "delims=" %%c in ('type !file1!') do (
  5.         call :str_x "%%c"
  6.         if !found0! EQU 1 ECHO [%%c]
  7.     )

  8.     pause
  9.     goto :eof

  10.     :str_x
  11.         set "str1=%~1"
  12.         SET found0=0
  13.         set n=0
  14.         :loop1
  15.         for %%i in (!n!) do (
  16.             set ch=!str1:~%%i,1!
  17.             if "!ch!"=="" exit /b
  18.             if not "!ch!"=="" (
  19.                 if "!ch!" GEQ "啊" ( if "!ch!" LEQ "齄" (
  20.                     set found0=1
  21.                     exit /b
  22.                 ))
  23.             )
  24.         )
  25.         set /a n +=1
  26.         goto loop1
  27.     exit /b
复制代码



点评

尽量少在for中使用call,遍历内容较少时没什么,多的时候很影响效率,你用for /l直接echo和call方式echo一试便知。  详情 回复 发表于 2022-5-22 09:55
当集合较大时,还是判断范围方便。这样可将16区前的全角符号制表符也排除了。  详情 回复 发表于 2022-5-22 09:46
回复

使用道具 举报

43#
发表于 2022-5-22 09:46:18 | 只看该作者

当集合较大时,还是判断范围方便。这样可将16区前的全角符号制表符也排除了。
回复

使用道具 举报

44#
发表于 2022-5-22 09:55:52 来自手机 | 只看该作者
dos时代菜鸟 发表于 2022-5-21 22:05
这也是个思路

尽量少在for中使用call,遍历内容较少时没什么,多的时候很影响效率,你用for /l直接echo和call方式echo一试便知。

点评

用call 主要用到 exit /b 如果 直接用 for ,就得用 goto  详情 回复 发表于 2022-5-22 10:04
回复

使用道具 举报

45#
发表于 2022-5-22 10:02:00 来自手机 | 只看该作者
英文没有一个占两个或者两个字节以上的哇,这是不是个突破点?
回复

使用道具 举报

46#
发表于 2022-5-22 10:04:17 | 只看该作者
nttwqz 发表于 2022-5-22 09:55
尽量少在for中使用call,遍历内容较少时没什么,多的时候很影响效率,你用for /l直接echo和call方式echo ...

用call 主要用到 exit /b
如果 直接用 for ,就得用 goto

点评

那就用goto跳出for循环。 你觉得用了call貌似觉得提高了效率,很可能效率反而更低。实际使用中,谁也不可能每次都测试不同写法的执行效率,所以还是少用为好。而且,你这也没到了需要权衡利弊到底用不用call的时候  详情 回复 发表于 2022-5-22 11:50
回复

使用道具 举报

47#
发表于 2022-5-22 10:14:25 来自手机 | 只看该作者
在中文全集中找太慢了吧
回复

使用道具 举报

48#
发表于 2022-5-22 10:49:51 来自手机 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

49#
发表于 2022-5-22 11:50:53 | 只看该作者
dos时代菜鸟 发表于 2022-5-22 10:04
用call 主要用到 exit /b
如果 直接用 for ,就得用 goto

那就用goto跳出for循环。
你觉得用了call貌似觉得提高了效率,很可能效率反而更低。实际使用中,谁也不可能每次都测试不同写法的执行效率,所以还是少用为好。而且,你这也没到了需要权衡利弊到底用不用call的时候,完全可以不用。

1000时,不用call用时60毫秒,用call用时2120毫秒,是不用call的35倍。
  1. 10:59:54.53
  2. 10:59:54.59
  3. 10:59:56.71
  4. 请按任意键继续. . .
复制代码

  1. @echo off

  2. echo;%time%
  3. for /l %%a in (1 1 1000) do (
  4.     echo;%%a
  5. )>nul
  6. echo;%time%
  7. for /l %%a in (1 1 1000) do (
  8.     call :echoecho %%a
  9. )>nul
  10. echo;%time%
  11. pause

  12. exit

  13. :echoecho
  14.     echo;%~1
  15. goto :eof
复制代码





点评

确实如此,因为 call 本身就是一个耗时的指令,他相当于 变相调用 了一次 cmd 。 我用 call 并不是因为效率,只是 书写上的习惯,习惯 模块化 函数化 了。容易 模块化的 修改和 理解。 当然,对于这样单一目的  详情 回复 发表于 2022-5-22 21:47
回复

使用道具 举报

50#
发表于 2022-5-22 13:22:03 | 只看该作者
还是我以前想的方法简单

pushd %~dp0
findstr /i /g:GBK汉字.txt a.txt

GBK汉字.txt从网上搜集并整理,2万+汉字,删除了部分变成英文?并且英文?能匹配的“汉字”,有精力和条件的或者需要结果特别严禁精确的可以进一步整理,不过个人感觉,一般用途足够了,毕竟常用汉字才几千个。


GBK汉字.txt下载
GBK汉字_findstr匹配适用_GBK.7z (10.48 KB, 下载次数: 1)

点评

只考虑常用汉字的话,gb2312够了。 主要看实际样本范围有多大。  详情 回复 发表于 2022-5-22 15:28
回复

使用道具 举报

51#
发表于 2022-5-22 14:15:58 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

52#
发表于 2022-5-22 14:47:46 | 只看该作者
bjay2008xmy 发表于 2022-5-22 10:49
找个对正则匹配完全支持的命令行程序

不可能有完全支持的,就像要将win98或更前的exe放到11里运行,东西在发展,没结束前,哪有完全。
微软自家不同产品里的正则互相也不完全兼容。各种正则的原理不一样,查找的方式也不一样。
回复

使用道具 举报

53#
发表于 2022-5-22 14:48:14 | 只看该作者
正则史比WIN史长。
回复

使用道具 举报

54#
发表于 2022-5-22 15:28:36 | 只看该作者
nttwqz 发表于 2022-5-22 13:22
还是我以前想的方法简单

pushd %~dp0

只考虑常用汉字的话,gb2312够了。
主要看实际样本范围有多大。

点评

你这种方法应该是把样本和TXT里面的汉子逐一对比吧,看符不符合TXT里面的。如果样本有200个字符的话,不是要对比200*6000=120万次吗  详情 回复 发表于 2022-5-22 20:40
回复

使用道具 举报

55#
发表于 2022-5-22 20:40:09 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

56#
发表于 2022-5-22 21:47:46 | 只看该作者
nttwqz 发表于 2022-5-22 11:50
那就用goto跳出for循环。
你觉得用了call貌似觉得提高了效率,很可能效率反而更低。实际使用中,谁也不 ...

确实如此,因为 call 本身就是一个耗时的指令,他相当于 变相调用 了一次 cmd 。
我用 call 并不是因为效率,只是  书写上的习惯,习惯 模块化 函数化 了。容易 模块化的 修改和 理解。

当然,对于这样单一目的的,确实没必要 搞一个函数来调用。

回复

使用道具 举报

57#
发表于 2022-5-23 08:03:25 | 只看该作者
bjay2008xmy 发表于 2022-5-22 20:40
你这种方法应该是把样本和TXT里面的汉子逐一对比吧,看符不符合TXT里面的。如果样本有200个字符的话,不 ...

这个计算是错误的。学习正则重要的是自己尝试,别人常用的,是他们的环境。findstr需要/R选项才能使用正则表达式,这种说法是错误的,东西要靠自己尝试结果,转发未经核实的太浪费屏幕空间,也会误导。
你还需要补充中文的编码知识,\u4e00 明显不是GB码。GB2312的中文范围俺已经在47楼说了,仔细往下看贴。

初学者能掌握findstr的正则就能满足常用需求了,findstr /?里有 [x-y]    范围: 在指定范围内的任何字符
本题实际是一个xy的求解。上面发的findstr "[^'-Z]" ,你试了没有,这就是没有/R的正则表达式。

点评

%u4e00是UTF-8编码,如果用这个编码判断的话,样本的编码也应该要使用UTF-8编码  详情 回复 发表于 2022-5-23 11:24
回复

使用道具 举报

58#
发表于 2022-5-23 11:24:41 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

59#
发表于 2022-5-24 08:18:06 | 只看该作者
bjay2008xmy 发表于 2022-5-23 11:24
%u4e00是UTF-8编码,如果用这个编码判断的话,样本的编码也应该要使用UTF-8编码

等你发示例教程教大家。
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-14 13:33

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表