标题: [文本处理] 正则表达式搜索包含中文的行 [打印本页]
作者: freesoft00 时间: 2017-7-27 23:10 标题: 正则表达式搜索包含中文的行
本帖最后由 freesoft00 于 2017-7-27 23:11 编辑
不知道这几个正则表达式如何写?
1、纯中文的行
2、包含中文的行
3、纯英文的行
4、包含英文和数字的行
5、除了英文和数字还包含其它字符的行(包括有中文,也包括其它不是中文的符号),例如下面几行内容
&L"沁Ф¨"
"<鼕n"
L"粒粒粒林粒溺ú"
本身是使用文本处理工具搜索的,并不是批处理的问题,主要是这几个正则的写法不会。
谢谢
作者: 3518228042 时间: 2017-7-28 00:24
纯中文的行
^[一-龥]+$
或
^[\u4E00-\u9FA5]+$
包含中文的行
^.*[一-龥].*$
或
^.*[\u4E00-\u9FA5].*$
纯英文的行
^[a-zA-Z]+$
包含英文和数字的行
^.*[a-zA-Z0-9].*$
不包含英文和数字,但是包含其它任意字符的行
^[^a-zA-Z0-9]+$- //&cls&(type 测试.txt)|cscript -nologo -e:jscript "%~f0"&pause&exit
- WSH.echo(WSH.StdIn.ReadAll().match(/^[\u4E00-\u9FA5]+$/mg).join('\r\n'));
- //提取全中文的行,匹配多个结果
复制代码
^行首
$行尾
[^\^]0{4,}非行首的字符+右边必须有4个0以上
[^一-龥]{2,5}$行尾以:非中文的任意2到5个字符结束
/g匹配所有可能
/i不区分大小写
/m匹配多行
作者: freesoft00 时间: 2017-7-28 10:18
本帖最后由 freesoft00 于 2017-7-28 10:20 编辑
回复 2# 3518228042
多谢了兄弟,我测试一下。
最后一个理解有出入:
不包含英文和数字,但是包含其它任意字符的行
我的原意是不仅包含数字英文,还包含其它任意字符的行。这样是不是就包括所有了,那么可以更改为不仅包含数字英文,还包含中文。(回复完帖子又想了想,这样是不是和第二条规则一样了,包含中文的行)
作者: freesoft00 时间: 2017-7-28 11:21
包含英文和数字的行
^.*[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"整个网络"
作者: 3518228042 时间: 2017-7-28 11:30
本帖最后由 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,标点符号等等都可以)
作者: tiger999 时间: 2017-7-28 23:08
bat可以写正则!?
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |