. : : ClassiClub ForuM : : .

会员中心 论坛帮助 日历事件 标记论坛已读
返回   精品技术论坛 » 技术论坛 » 『软件使用』

『软件使用』: 电脑软件推荐, 电脑软件使用, 经验分享



发表新主题 关闭主题
 
主题工具
jiuk2k
 
jiuk2k 的头像
待认证激活
 
资 料:
注册日期: Mar 2002
帖子: 3,177 声望值: 2
精华: 5
#1 旧 2005-04-24, 01:36:43 默认 【正则表达式专题】正则表达式的应用
jiuk2k 当前离线  

本来早就该写了,一直拖到现在,向lyh728表示歉意

正则表达式(regular expression)可以用来查找,替换,提取符合一定模式的子串.
它的概念其实很简单,很多人望而生畏很大一部分原因在于记不住它的语法。其实如果利用英文来助记,就简单多了。(如 \t (tab) \n (new line) \w (word) )

1. 正则表达式的语法论坛已有不少介绍,这里就不详叙了(请参考下面链接),只选几个常用的:

. 匹配任意一个字符
[abxy0-6] 匹配abxy中任意一个字母或0-6任意一个数字
[^abxy0-6] 匹配除了abxy和0-6的任意一个字符
\t tab, 匹配tab
\n new line
\r return

\w word, 匹配任意一个字母(加上"_")
\W 匹配任意一个非字母
\s space, 匹配空格
\S 匹配非空格
\d digital,匹配任意一个数字
\D 匹配任意一个非数字

{n,m} 匹配n到m次
? 匹配0或1次,相当于 {0,1}
* 匹配0或多次,相当于 {0,}
+ 匹配1或多次,相当于 {1,}

^ 匹配行首
$ 匹配行尾
\b boundary,匹配单词边界

| or
( ) 括号分组,用于后向引用
\1 \2 后向引用先前括号分组的表达式


正则表达式详叙,请参考:

【正则表达式专题】正则表达式介绍及其在EmEditor的应用(更新) (nb590 )
http://bbs.et8.net/bbs/showthread.php?t=652159

【原创+整理】EditPlus 2.12使用技巧集萃 build2005.03.14 (Liangjh )
http://bbs.et8.net/bbs/showthread.php?t=623472

【帮助翻译】正则表达式简要用法-强大的查找替换语法 (Liangjh )
http://bbs.et8.net/bbs/showthread.php?t=568178

【原创+整理】EditPlus 软件使用技巧以及常见问题解决(2004-08-23 完善) (Liangjh )
http://bbs.et8.net/bbs/showthread.php?t=567662

【原创】Total Commander的正则表达式 (slownet )
http://bbs.et8.net/bbs/showthread.php?t=599222

http://www.regular-expressions.info/tutorial.html

http://msdn.microsoft.com/library/ch...xpressions.asp





2. 正则表达式工具

工欲善其事,必先利其器。支持正则表达式的工具很多,这里介绍几个常用的。

2.1 正则表达式学习:
Regbuddy www.regexbuddy.com


Regex Coach www.weitz.de/regex-coach/



【版主至诚奉献】正则表达式效验器(CCF Only) (dust2k )
http://bbs.et8.net/bbs/showthread.php?t=441719


2.2 正则表达式批量文件更名,查找
【原创】Total Commander的正则表达式 (slownet )
http://bbs.et8.net/bbs/showthread.php?t=599222

托把更名器 (xtools renamer)

search and replace

powergrep (regex buddy同一公司 http://www.powergrep.com )



2.3 支持正则表达式的编辑器

EmEditor
【正则表达式专题】正则表达式介绍及其在EmEditor的应用(更新) (nb590 )
http://bbs.et8.net/bbs/showthread.php?t=652159

Editplus
【原创+整理】EditPlus 2.12使用技巧集萃 build2005.03.14 (Liangjh )
http://bbs.et8.net/bbs/showthread.php?t=623472

UltraEdit

PSPad http://www.pspad.com/ (freeware)
Crimson Editor http://www.crimsoneditor.com/ (freeware)

textpro http://www.fodian.net/


3. 正则表达式应用实例

要想真正掌握正则表达式语法并活学活用,实例是最好的教材。
结合应用实例理解正则表达式语法和不同情况下的模式解析,匹配组合,相信大家都能
再实际应用中体会到正则表达式的强大。

以下实例可以有不同解答,这里只是随便选了其中一种。顺便说一句,正则表达式很有用,但并不是万金油,有时其它方法更简单有效,如命令行。


3.1 请问EmEditor里面如何将回车替换为“,”?
http://bbs.et8.net/bbs/showthread.php?t=640875
请问EmEditor里面如何将回车替换为“,”?在Word里面我就知道这么替换,可想在EMmEditor里面处理

选正则表达式
\r\n 替换为 ,



3.2 能用查找/替换解决吗?如何做?
http://bbs.et8.net/bbs/showthread.php?t=617648
如图所示文档,很长,能否用查找/替换功能将红圈所示处的回车符去掉,两行变成一行以缩短文档?

用TEXTPRO查找“(\a+)”,替换为“\1\d”,勾上正则表达式。
能说一下这个软件的支持中文的正则表达式是如何支持么,例如,正则表达式可以区分字符和数字,也能区分出来中文字符么,gb、big5之类的可以自动判断么。
可以呀:\a匹配字母;\d就匹配数字;\c匹配汉字;\b就匹配BIG;\g就匹配GB。。。你自己去看帮助文件呀。



3.3 如何找出 6 个字母组成的单词?
http://bbs.et8.net/bbs/showthread.php?t=650868
有没有什么工具,可以自动列出6 个字母组成的单词? 或 7 个。概念就我想找由几个字母长度的单词。英文的

search for: \b[a-zA-Z]{6}\b (谢谢crackabc兄指出)






3.4 怎样把一行文本替换成两行
http://bbs.et8.net/bbs/showthread.php?t=354127
比如一段程序中一行是
123
现在我想变成
456
789
什么软件能实现,ue行吗


ue可以。
replace对话框里选中regular expressions,replace with 456^p789

editplus:
查找:123\n
替换为456\n789



3.5 editPlus如何把一段html中指定一段代码删掉
http://bbs.et8.net/bbs/showthread.php?t=625548
比如我想把<td width="50">开始往后,到下一个</td>结束的一段删掉,<td></td>中间的内容不是一样的,有可能中间是一段html代码,有可能只有一些字符。
正则表达式该如何写?

editplut支持的是RegEx的子集,所以:
<td> ...</td>同一行: ^<td[^/]*</td>
<td> ...</td>不同行: ^<td[^/]*\n</td>

以上不完美:一旦搜到了</a>这样的标签时,就下不去了。二没用问号,如果有<td>A</td>B<td>C</td>,会把B处也删了的。可以为<td>.*?\n*?</td>
(谢谢crackabc兄指出)。


3.6 如何批量删除混在汉字里的英文字母?
http://bbs.et8.net/bbs/showthread.php?t=610345

现在有什么好办法把导出的文件中夹杂的汉语拼音删掉呢?

阿a尔巴尼亚
挨饿
哀而不伤
阿a拉伯bo
安理会hui


支持正则表达式的编辑器都可以啊。搜索:[a-zA-Z]+,替换为空。



3.7 一个文字替换的问题,可能要用到表达式来实现...已解决
http://bbs.et8.net/bbs/showthread.php?t=581615
比如格式如下

寻找从#开始,@结束的一段文字,在后面加字符$,也即使
#...@
替换成
#...@$
其中...部分中的文字保持不变,别告送我直接用@替换成@$,因为文档里面有很多不相关的@,所以一定得寻找从#开始,@结束的一段才行

UE,configuration的find要选中unix风格的正则表达式。
代码:
查找:#(.*[\S\s\p]*)@
替换为:#\1@$


3.8 TC批量更名问题
http://bbs.et8.net/bbs/showthread.php?t=556109
我说的是例子....实际我要改的是
[Kyou_kara_Ma_Ou][002v2][jap_chn][xvid_bf].avi
[Kyou_kara_Ma_Ou][011][jap_chn][xvid_bf].avi
[Kyou_kara_Ma_Ou][012][jap_chn][xvid_bf].avi
[Kyou_kara_Ma_Ou][013][jap_chn][xvid_bf].avi
[x][Kyou_kara_Ma_Ou][16][jp_cn][XviD].rmvb

这类的...保留数字....[C]是固定排列数字的
顺序没有规则,应该不能用[C]
文件头不同,应该也不能保留范围..
能否查找字符并命名为所找字符?


以这5个文件为例,我特意把其中一个文件名数字部分前后的方括号内的部分加上数字,如果文件名是[]组成的几部分,其中要保留部分以数字开头,其余都是非数字开头,TC中用mulitrename tool,选中“RegEx”,搜索&替换中:
代码:
代码:
search for: \[\D*.*\]\[(\d*[a-zA-Z0-9]*)\]\[.*\]
Replace with: $1



3.9 如何在指定文字间添加相关内容(内详)
http://bbs.et8.net/bbs/showthread.php?t=640503
手上有一份缩略语列表,想导入词典软件,需要在缩略语与全称间加入“|”,在每行末尾加上“\r\n”(见贴图),请问有什么简便方法完成上述操作? 谢谢!


regular expression (tested in regexbuddy)
search: (^[\w-]+)(.+)
replace: $1 | $2 \\r\\n

emeditor:
search: (^[\w-]+)(.+)
replace: \1 | \2 \\r\\n




3.10 怎样让一段文字每个字之间都有空格
http://bbs.et8.net/bbs/showthread.php?t=642723
就是打完一段文字后,要使每个字之间都加一个空格,怎么替换?

emeditor replace (check regular expressions)
find: (.)
replace: \1 (note: there is a space after \1)



3.11 如何从文本文件中提取邮件地址
http://bbs.et8.net/bbs/showthread.php?t=510264
情况是这样的,在一个大的文本文件里,有许多电子邮件的地址,格式如下
...........................................
<a href=mailto:aabbcc520@tom.com>
............................................
<a href=mailto:cc223d@netease.com>
.........................
<a href=mailto:easy@china.com>
.................................
现在的问题是:有没有什么软件能把整个文本文件里的电子邮件地址全部都提取出来,而不需要手工一个个去找。
ultraedit可以做到吗?如何做?是不是要采用正规表达之类的手段?


用ue:
find:mailto:*>
选中“regular expression”和“list lines containing string”,find next,
所有含邮件地址的行选出来,clipboard,粘贴,再替换掉没用的头、尾。



3.12 中文名文件转换标准数字文件名,求最简单最快方法,学院派测试题,有兴趣的人请来试试
http://bbs.et8.net/bbs/showthread.php?t=625172
最近看1本小说 名字是中文的
第 一 章.txt
第 二 章.txt
第 三 章.txt
.
.
第九十章.txt
第九十一章.txt
.
.
第九十九章.txt
第一○○章.txt
第一○二章.txt
.
.
第一一一章.txt

大家也知道 在合并或者排版时候,有时候需要排序,此时要处理文件名,修改为标准的,比如第1章 或者对此文应该为 第001章或者根本就修改为001章.... 111章
但是要注意,在本题中 第一到第九章文件名字有空格,还有第九十九章后面是第一○○章,注意这个○那位程序员能编辑1个程序或者脚本来自动完成这个最好,或者熟悉正则表达式的高手来试试看 ,求最简单修改文件名办法,拜谢!


惭愧惭愧,漏掉了考虑"第 十 章.txt ”,“第十八章.txt”等的情况,因为当时没模板,只是随便构造了几个文件. 谢谢slownet兄指出.
现根据Hermit给的文件模板和参考slownet兄的方法,修改以前的方法如下
Total Commander 6.5:
1. ctl+A 全选, ctl+M 启动TC 批量更名工具:
一| 十|第十|十章|二|三|四|五|六|七|八|九|十|○|序| |第|章
-> 1|10|1|0|2|3|4|5|6|7|8|9| |0|0

2. 第一步结束后,接着在同一TC 批量更名窗口按F5, 选regex
1.txt -> 001.txt : ^([\d])\. -> 00$1.
20.txt -> 020.txt : ^([\d]{2})\. -> 0$1.





针对Hermit给的文件模板,用Total commander 6.5的批量重命名工具可以两步完成。
受jiuk2k的启发,在他的基础上改进,因为他的方法中第1步不能正常处理“第 十 章.txt”,“第八十章.txt”,“第十八章.txt”等。

修改步骤:

1. 首先修改wincmd.ini:
[configuration]
SortUpper=2(或者3)
(该选项在重启TC后生效)

2. 选择全部文件,ctrl+M,search for写:
代码:
代码:
<space>十|○|九|八|七|六|五|四|三|二|一|第十|十章|十|第|章|<space>
replace with写:

代码:
代码:
10|0|9|8|7|6|5|4|3|2|1|1|0
其中<space>代表一个空格。这个空格不能省略。
现在预览窗口内已经看到效果了,我挨个检查过,全部正确。start,改名完成后按F5(或start旁边的那个按钮),把file name那里原来的[N]改为[C],define counter的digits改为3。改名,完成。
如果连“序 章.txt”也想改名,比如000.txt,只要在上面搜索多加“序”,对应替换“0”。

说明:
1. 必须TC 6.5。
2. 搜索和替换按顺序是一一对应的。这是6.5的新增功能:同时搜索、替换多个字符串。
3. 搜索字符串的先后顺序是有要求的,比如单个空格替换为空,这项必须写在最后,否则无法正确处理“第 十 章.txt”,搜索字符串的第1项就专门针对这个文件。后面的“第十”替换为1,针对“第十一章.txt”等9个文件,“十章”替换为0,针对“第二十章.txt”等8个文件。



3.13 Total Commander拷贝时自动重命名
http://bbs.et8.net/bbs/showthread.php?t=626973

1,copy第3层子目录下的文件到目标路径,tc可以否?
想了个cmd的
代码:
代码:
dir /s/b/a:d >d.txt
for /f "tokens=1-4 delims=\" %i in (d.txt) do echo n | xcopy /e "%i\%j\%k\%l" 目标路径

search对话框,选plugin tab, check "search in plugins"
plugin: TC, property: path, op: regex, value: ([^\\]+\\){3}
then feed to listbox







3.14 如何批量修改快捷方式?
http://bbs.et8.net/bbs/showthread.php?t=646841
把所有的C:\XXXXXXX改为D:\XXXXXXXXX

powergrep->replace
check regular expression and search binary files

代码:
代码:
search:     c:(\\\w[\\\w\d \.]*.exe)
replace:    d:$1
folder:     where you put your 快捷方式 file
file mask:  *.lnk



3.15 Totalcmd如何一次提取N个快捷方式的实际地址?
http://bbs.et8.net/bbs/showthread.php?t=629458

powergrep->collect:

search: ([cdefgh]:\\\w[\\\w\d\. ]*.exe)
collect: $1
folder: specify it by yourself
file mask: *.lnk

check regualr expression, search binary files
uncheck seperate each file
上传的图像
文件类型: jpg powergrep.JPG (58.7 KB, 768 次查看)

此帖于 2005-12-17 14:41:06 被 jiuk2k 编辑. .


NearbyFeed基于地点的社交网络iPhone和Android应用程序,欢迎到App Store和Android Market下载使用nearbyfeed.com
Ace
 
Ace 的头像
荣誉版主
 
资 料:
注册日期: Jun 2002
帖子: 5,994 声望值: 6
精华: 0
#2 旧 2005-04-24, 02:05:58 默认
Ace 当前离线  

好帖收藏~
ario
 
ario 的头像
支柱会员
 
资 料:
注册日期: Nov 2001
帖子: 4,555 声望值: 3
精华: 0,解答: 1
#3 旧 2005-04-24, 03:41:37 默认
ario 当前离线  

不错不错 辛苦了
布衣
 
布衣 的头像
超级会员
 
资 料:
注册日期: Apr 2002
帖子: 1,936 声望值: 5
精华: 1,解答: 2
#4 旧 2005-04-24, 07:45:59 默认
布衣 当前离线  

强帖,收藏。感谢楼主整理分享。
fm2k
 
fm2k 的头像
热心会员
 
资 料:
注册日期: Jun 2000
帖子: 993 声望值: 8
精华: 8,解答: 8
#5 旧 2005-04-24, 08:32:33 默认
fm2k 当前离线  

好贴!楼主辛苦了,所推荐的regbuddy看起来好像挺不错的。谢谢!
csRalf
 
csRalf 的头像
中级会员
 
资 料:
注册日期: May 2002
帖子: 363 声望值: 3
精华: 1
#6 旧 2005-04-24, 08:42:11 默认
csRalf 当前离线  

问个问题,正则表达式中如何对指定的匹配字符串替换为大写或小写?
slownet
 
slownet 的头像
热心会员
 
资 料:
注册日期: Dec 2000
帖子: 2,317 声望值: 8
精华: 11,解答: 8
#7 旧 2005-04-24, 09:04:19 默认
slownet 当前离线  

引用:
作者: csRalf
问个问题,正则表达式中如何对指定的匹配字符串替换为大写或小写?
emeditor中,replace with:\U\1(匹配字符串替换为大写)
\L\1(替换为小写)
csRalf
 
csRalf 的头像
中级会员
 
资 料:
注册日期: May 2002
帖子: 363 声望值: 3
精华: 1
#8 旧 2005-04-24, 09:10:53 默认
csRalf 当前离线  

引用:
作者: slownet
emeditor中,replace with:\U\1(匹配字符串替换为大写)
\L\1(替换为小写)
thanx, 很好的补充啊!!不过这个好像是emeditor的自主设置吧,我在ie6和editplus中简单试了下不行,这个确实挺困拢人的。

此帖于 2005-04-24 09:30:53 被 csRalf 编辑. .
zyzyeast
 
zyzyeast 的头像
超级会员
 
资 料:
注册日期: Mar 2002
帖子: 1,330 声望值: 3
精华: 1,解答: 1
#9 旧 2005-04-24, 09:54:36 默认
zyzyeast 当前离线  

哇,一直都没找到的好贴啊!
hitme
 
hitme 的头像
支柱会员
 
资 料:
注册日期: Oct 2001
帖子: 6,490 声望值: 2
精华: 38,解答: 6
#10 旧 2005-04-24, 10:15:57 默认
hitme 当前离线  

通过实例来学习真是通俗易懂,非常好,感谢
老实说,先前我是对regex一窍不通,看了事例有点数了:有点特征就能对上眼,hoho一个萝卜一个坑

豁然开朗,原来findstr支持的就是缩水版regex,呼,我真土
大概如此?

(^[匹配类型]${匹配次数})(......)

反向引用\1 \2 替换项
lyh728
 
lyh728 的头像
『软件使用』版主
 
资 料:
注册日期: Jan 2002
帖子: 4,283 声望值: 3
精华: 15,解答: 4
#11 旧 2005-04-24, 10:43:10 默认
lyh728 当前离线  

引用:
作者: hitme
通过实例来学习真是通俗易懂,非常好,感谢
老实说,先前我是对regex一窍不通,看了事例有点数了:有点特征就能对上眼,hoho一个萝卜一个坑

豁然开朗,原来findstr支持的就是缩水版regex,呼,我真土
大概如此?

(^[匹配类型]${匹配次数})(......)

反向引用\1 \2 替换项
原来这么土阿
jiuk2k
 
jiuk2k 的头像
待认证激活
 
资 料:
注册日期: Mar 2002
帖子: 3,177 声望值: 2
精华: 5
#12 旧 2005-04-24, 10:53:20 默认
jiuk2k 当前离线  

引用:
作者: hitme
通过实例来学习真是通俗易懂,非常好,感谢
老实说,先前我是对regex一窍不通,看了事例有点数了:有点特征就能对上眼,hoho一个萝卜一个坑

豁然开朗,原来findstr支持的就是缩水版regex,呼,我真土
大概如此?

(^[匹配类型]${匹配次数})(......)

反向引用\1 \2 替换项

说实话我刚开始也是先看slownet兄和Liangjh兄的介绍贴,然后又看了perl的正则表达语法,在通过各种实例慢慢掌握的。个人感觉不停的实践对正则表达语法的掌握和运用很有用. 同时也希望更多的人能把正则表达运用到工作学习中。它会带来许多的方便。
hitme
 
hitme 的头像
支柱会员
 
资 料:
注册日期: Oct 2001
帖子: 6,490 声望值: 2
精华: 38,解答: 6
#13 旧 2005-04-24, 10:56:06 默认
hitme 当前离线  

引用:
作者: lyh728
原来这么土阿
是啊,看半天武功心法(语法说明书)实难领会,常常略过
还是土一点,从招式开始好,练特别的招式时对照下心法
三下两下,套路就熟练起来了。。。
印象中,还真没人教套路,背熟了心法却不知道怎么k人啊
hitme
 
hitme 的头像
支柱会员
 
资 料:
注册日期: Oct 2001
帖子: 6,490 声望值: 2
精华: 38,解答: 6
#14 旧 2005-04-24, 11:09:49 默认
hitme 当前离线  

引用:
作者: jiuk2k
说实话我刚开始也是先看slownet兄和Liangjh兄的介绍贴,然后又看了perl的正则表达语法,在通过各种实例慢慢掌握的。个人感觉不停的实践对正则表达语法的掌握和运用很有用. 同时也希望更多的人能把正则表达运用到工作学习中。它会带来许多的方便。

你干的真棒,连我这般懒散的人都感觉level up了,一定要好好夸下
师傅在上,请受徒儿一拜 ft103:
会打罗汉拳是个好的开始.. 找人练练,打不过,进藏经阁查查资料,动动脑筋,使上大力金刚,只是时间问题了 ft059:

此帖于 2005-04-24 11:27:51 被 hitme 编辑. .
lyh728
 
lyh728 的头像
『软件使用』版主
 
资 料:
注册日期: Jan 2002
帖子: 4,283 声望值: 3
精华: 15,解答: 4
#15 旧 2005-04-24, 12:29:04 默认
lyh728 当前离线  

引用:
作者: hitme
你干的真棒,连我这般懒散的人都感觉level up了,一定要好好夸下
师傅在上,请受徒儿一拜 ft103:
会打罗汉拳是个好的开始.. 找人练练,打不过,进藏经阁查查资料,动动脑筋,使上大力金刚,只是时间问题了 ft059:
我要收中介费
发表新主题 关闭主题

主题工具

论坛规则  发帖规则
不可以发表主题
不可以回复帖子
不可以上传附件
不可以编辑自己的帖子
论坛启用 vB 代码
版面启用 表情符号
版面启用 [IMG] 代码
版面禁用 HTML 代码


所有时间均为北京时间, 现在的时间是 06:01:58.

本论坛带宽由迅通网络提供
SSL证书由TrustAsia提供

Copyright © 2000 - 2019 ClassiClub Forum All Rights Reserved.
粤ICP备09123456号