无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 5417|回复: 61
打印 上一主题 下一主题

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

  [复制链接]
1#
发表于 2022-5-19 12:13:01 | 显示全部楼层
findstr /r /c:"[^- '!-Z]" text.txt

点评

还有高手! 请教下^- '!-Z的含义?我只是个卖唱的,只知道0-9a-z的含义。。。  详情 回复 发表于 2022-5-19 20:26
查找效率确实高,原版boot.wim镜像的文件列表中,随意加入一些中文,几乎秒查出带中文的行 命令行中的"Z",不能换成小写的"z",否则,凡是有大写Z的行也要被查找出来,这是什么原因?  详情 回复 发表于 2022-5-19 20:17
代码简洁,一行胜百行  发表于 2022-5-19 13:18
回复

使用道具 举报

2#
发表于 2022-5-20 08:06:51 | 显示全部楼层
yjqd 发表于 2022-5-19 20:17
查找效率确实高,原版boot.wim镜像的文件列表中,随意加入一些中文,几乎秒查出带中文的行

命令行中的 ...

如果是文件列表,则范围可以更小了,有不少字符是不能作文件名的。
不知道你要Z还是z,将需求说得更明确些好。这个是用了[^class],当然[class]也可实现。

点评

谢谢! 我是需要在文本中只查找带有中文字符的行 我昨天测试的时候,把Z写成z了,结果是没有中文字符的行但有大写的的Z的行也被查找出来了  详情 回复 发表于 2022-5-20 08:46
回复

使用道具 举报

3#
发表于 2022-5-20 08:08:42 | 显示全部楼层
nttwqz 发表于 2022-5-19 20:26
还有高手!

请教下^- '!-Z的含义?我只是个卖唱的,只知道0-9a-z的含义。。。

当时正好要午睡了zzz,只是随便百度的的,正则费脑的,多想容易睡不着。
回复

使用道具 举报

4#
发表于 2022-5-20 09:03:19 | 显示全部楼层
yjqd 发表于 2022-5-20 08:46
谢谢!

我是需要在文本中只查找带有中文字符的行

俺喜欢复制粘贴,省事啊。
回复

使用道具 举报

5#
发表于 2022-5-20 09:09:55 | 显示全部楼层
nttwqz 发表于 2022-5-19 20:26
还有高手!

请教下^- '!-Z的含义?我只是个卖唱的,只知道0-9a-z的含义。。。

就一楼给的测试数据,用 findstr /r /c:"[^ a-z0-9]" text.txt 就可以了,这样是不是更容易理解些?

点评

谢谢! 这个相对容易理解了,我昨天也写过这样的命令,但^和a-z0-9之间没空一格,导致所有行查出来了 ^后空一格是什么意思 另外,你昨天的命令是不是更适合任何内容的文本,不一定是文件列表的文本,比如dism  详情 回复 发表于 2022-5-20 09:25
回复

使用道具 举报

6#
发表于 2022-5-20 09:41:20 | 显示全部楼层
yjqd 发表于 2022-5-20 09:25
谢谢!

这个相对容易理解了,我昨天也写过这样的命令,但^和a-z0-9之间没空一格,导致所有行查出来了
...

你要什么东西,就提供原始和结果的附件。正则是有书的,需要时间去掌握。

点评

谢谢,不好意思,麻烦了 关于字符集里字母的大小写也影响结果 test.txt: Meng said the commission will step one 129 ok two78kl three99 88 ui thre99 88 ui6 中有粉因 bk高兴oewp 89爵士io 12听99 j  详情 回复 发表于 2022-5-20 09:53
回复

使用道具 举报

7#
发表于 2022-5-20 09:56:33 | 显示全部楼层
yjqd 发表于 2022-5-20 09:53
谢谢,不好意思,麻烦了
关于字符集里字母的大小写也影响结果
test.txt:

没看出啥问题来,你要哪种结果呢?

点评

我不是否定你写的命令,我的意思是:比如我有时候没注意字符集里字母的大小写,会影响我只查找带中文字符的行的结果 即使就用这个命令,findstr /r /c:"[^ a-z0-9]",也把带Z的英文行查找出来了,而我只想查找有  详情 回复 发表于 2022-5-20 10:15
回复

使用道具 举报

8#
发表于 2022-5-20 10:34:37 | 显示全部楼层
yjqd 发表于 2022-5-20 10:15
我不是否定你写的命令,我的意思是:比如我有时候没注意字符集里字母的大小写,会影响我只查找带中文字符 ...

这东西得你自己试的啊,你要忽略大小写在样本里提供也方便别人写啊,牙膏是挤不完的。

findstr /rc:"[^ a-z0-9A-Z]" text.txt

点评

非常感谢 我水平有限,不明其理只能胡乱测试,所以伸手向各位坛友求助  详情 回复 发表于 2022-5-20 10:41
回复

使用道具 举报

9#
发表于 2022-5-20 10:46:35 | 显示全部楼层
yjqd 发表于 2022-5-20 10:41
非常感谢

我水平有限,不明其理只能胡乱测试,所以伸手向各位坛友求助

findstr /ric:"[^ a-z0-9]" text.txt
findstr /ric:"[^ A-z0-9]" text.txt
findstr /ric:"[^ a-Z0-9]" text.txt
findstr /ric:"[^ A-Z0-9]" text.txt
正则写法不是唯一的,多试好为,复制粘贴可以少走弯路。

点评

谢谢提供参考 findstr /rc:"[^ a-z0-9A-Z]" 已解决了我的问题  发表于 2022-5-20 10:51
回复

使用道具 举报

10#
发表于 2022-5-20 10:48:56 | 显示全部楼层
得学会 /?
findstr /?
/I         指定搜索不分大小写。
回复

使用道具 举报

11#
发表于 2022-5-20 11:51:28 | 显示全部楼层
nttwqz 发表于 2022-5-20 10:39
'前面为什么有空格?

样本里有不少空格啊。如果是8.3格式就不需要了。

点评

^[%u4e00-%u9fa5]{0,}$这个正则表达式说是识别中文,咋没用呢 @echo off findstr /r /c:"^[%u4e00-%u9fa5]{0,}$" test.txt pause  详情 回复 发表于 2022-5-20 12:50
回复

使用道具 举报

12#
发表于 2022-5-20 13:00:14 | 显示全部楼层
bjay2008xmy 发表于 2022-5-20 12:50
^[%u4e00-%u9fa5]{0,}$这个正则表达式说是识别中文,咋没用呢

@echo off

中文是个比较复杂的事,国内第一代标准是GB2312-1980,含6千多个汉字,采用的是高位都为1的双字节方案。港台还有hz big5到gbk还没完,到后面还有四字节的中文。
他没说这个正则是什么编码的中文的话,你得去问问他适应范围。

点评

那有没有应用在此例中专门识别中文的正则表达式  详情 回复 发表于 2022-5-20 13:50
回复

使用道具 举报

13#
发表于 2022-5-20 13:55:23 | 显示全部楼层
bjay2008xmy 发表于 2022-5-20 13:50
那有没有应用在此例中专门识别中文的正则表达式

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

回复

使用道具 举报

14#
发表于 2022-5-20 14:11:18 | 显示全部楼层
bjay2008xmy 发表于 2022-5-20 13:59
没有通用的吗,我还以为有通用的不仅限于此例样本的正则表达式

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

任何东西都离不了环境。
回复

使用道具 举报

15#
发表于 2022-5-21 07:49:32 | 显示全部楼层
bjay2008xmy 发表于 2022-5-20 21:51
这确实是个好办法,解决问题的思路要比方法更重要

findstr "[^'-Z]"

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

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

使用道具 举报

16#
发表于 2022-5-21 20:45:23 | 显示全部楼层
dos时代菜鸟 发表于 2022-5-21 10:08
还是要搞个 非中文的 字符集,做排除用。 比如英文的字符集

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

使用道具 举报

17#
发表于 2022-5-22 09:46:18 | 显示全部楼层

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

使用道具 举报

18#
发表于 2022-5-22 10:14:25 来自手机 | 显示全部楼层
在中文全集中找太慢了吧
回复

使用道具 举报

19#
发表于 2022-5-22 14:47:46 | 显示全部楼层
bjay2008xmy 发表于 2022-5-22 10:49
找个对正则匹配完全支持的命令行程序

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

使用道具 举报

20#
发表于 2022-5-22 14:48:14 | 显示全部楼层
正则史比WIN史长。
回复

使用道具 举报

21#
发表于 2022-5-22 15:28:36 | 显示全部楼层
nttwqz 发表于 2022-5-22 13:22
还是我以前想的方法简单

pushd %~dp0

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

使用道具 举报

22#
发表于 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的正则表达式。
回复

使用道具 举报

23#
发表于 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-17 05:41

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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