[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 正则表达式搜索包含中文的行

本帖最后由 freesoft00 于 2017-7-27 23:11 编辑

不知道这几个正则表达式如何写?
1、纯中文的行
2、包含中文的行
3、纯英文的行
4、包含英文和数字的行
5、除了英文和数字还包含其它字符的行(包括有中文,也包括其它不是中文的符号),例如下面几行内容
&L"沁Ф¨"
"<鼕n"
L"粒粒粒林粒溺ú"


本身是使用文本处理工具搜索的,并不是批处理的问题,主要是这几个正则的写法不会。
谢谢

纯中文的行
^[一-龥]+$

^[\u4E00-\u9FA5]+$

包含中文的行
^.*[一-龥].*$

^.*[\u4E00-\u9FA5].*$

纯英文的行
^[a-zA-Z]+$

包含英文和数字的行
^.*[a-zA-Z0-9].*$

不包含英文和数字,但是包含其它任意字符的行
^[^a-zA-Z0-9]+$
  1. //&cls&(type 测试.txt)|cscript -nologo -e:jscript "%~f0"&pause&exit
  2. WSH.echo(WSH.StdIn.ReadAll().match(/^[\u4E00-\u9FA5]+$/mg).join('\r\n'));
  3. //提取全中文的行,匹配多个结果
复制代码
^行首
$行尾
[^\^]0{4,}非行首的字符+右边必须有4个0以上
[^一-龥]{2,5}$行尾以:非中文的任意2到5个字符结束
/g匹配所有可能
/i不区分大小写
/m匹配多行
2

评分人数

TOP

本帖最后由 freesoft00 于 2017-7-28 10:20 编辑

回复 2# 3518228042


    多谢了兄弟,我测试一下。
最后一个理解有出入:
不包含英文和数字,但是包含其它任意字符的行
我的原意是不仅包含数字英文,还包含其它任意字符的行。这样是不是就包括所有了,那么可以更改为不仅包含数字英文,还包含中文。(回复完帖子又想了想,这样是不是和第二条规则一样了,包含中文的行)

TOP

包含英文和数字的行
^.*[a-zA-Z0-9].*$
------------------------
这个带有中文等字符的行也包括在内了。我想要的结果,行中只有英文和数字。
esi,dword ptr ds:[773A702C]                             "3T:w\rT:w"==L"吳眺名眺"
另外,我的疏忽,这些行内基本上除了数字英文,还有标点,:[]等。
应该是包含英文、数字和标点的行


包含中文的行
^.*[一-龥].*$

^.*[\u4E00-\u9FA5].*$
----------------------------------
第一个可以,第二个不行没有结果


不包含英文和数字,但是包含其它任意字符的行
^[^a-zA-Z0-9]+$
-----------------------------------
这条带有中文、英文、数字的行没有包括在其内。
例如:
dword ptr ss:[ebp-1C],mpr.70F3F4D8                      L"整个网络"

TOP

本帖最后由 3518228042 于 2017-7-28 18:58 编辑

网上有正则表达式30分钟入门教程,可以看看
包含中文那个第二个无效的把$去掉看看,我试了我的可以,开多行
最后一行提问的不能有英文和数字,但是你又有英文和数字,自然就被不能匹配。

只有英文和数字的行
^[a-z0-0A-Z]+$
如果有标点,标点也添加到[]里面去,有什么字符就添加什么。不能有什么就添加到[^],比如非0-9[^0-9]

行首任意字符1个以上至行尾结束,表达式后面没有/mg就匹配第一行的内容
^.+$

行首任意字符1个以上到行尾结束,这个会尽可能的匹配更多字符,也就是文本所有内容
^[\S\s]+$
^[\D\d]+$
^[\w\W]+$

大写的A-Z贪婪的匹配方式,会尽可能多匹配,
小写的a-z惰性的匹配方式,尽可能的少匹配,
也就是大写A-Z的任意字符1个以上,右边必须还要有小写a-z的任意字符1个
[A-Z]+[a-z]+?

匹配含中文字符的短句
[^ ,。、“”:;!?…]*中文+[^ ,。、“”:;!?…]*

零宽断言
(?=exp)        匹配exp前面的位置
(?<=exp)        匹配exp后面的位置
(?!exp)        匹配后面跟的不是exp的位置
(?<!exp)        匹配前面不是exp的位置

……是子表达式内容,方式是这样的:
……(?=exp)
(?<=exp)……
……(?!exp)
(?<!exp)……

不能下面这样写,下面都是错误的
(?=A)BC
BC(?<=A)
(?!A)AB
BA(?<!A)

下面是几种组合方式,取中间的子表达式:
(?<=A).+(?=A)     文本内容:ABCBCDCBAABB将匹配BCBCDCBA (这个前后都必须有A,就会取两个A中间的内容)
(?<=A).+B(?!A)    文本内容:ABCBCDCBAA将匹配BCB                (这个前面必须有A,后面不能是A,既然不能是A,其他任意字符都可以,然后取中间内容)
(?<!A)B.*(?=A)    文本内容:ABCBCDCBAABB将匹配BCDCBA      (这个前面不能是A的字符,那么其他任意字符都可以,后面必须是A的字符,然后取中间内容)
(?<!A)B.*B(?!A)   文本内容:ABBCBBA将匹配AB后面的BCB          (这个前后不能是A的字符,其他任意字符都可以,然后取中间内容,不能是A的B,那么前面可以是B的B、C的B等字符,后面也一样,不是A,标点符号等等都可以)
1

评分人数

TOP

bat可以写正则!?

TOP

返回列表