[ZZ]使用Ulipad进行正则替换处理

<转载自 http://hi.baidu.com/limodou/blog/item/086a38db2e1f916ad1164ef4.html >
使用Ulipad进行正则替换处理

Ulipad中的查找替换是支持正则式的,也许有人还不知道。下面是一个案例讲述了如何在Ulipad中进行正则式的查找和替换。

故事是这样的:

网友Joe问我一个问题,有没有可以支持正则替换的工具,我说,有啊,EditPlus和Ulipad都可以。Joe是因为从论坛里直接拷贝了一些文本,但是有一些无用的信息想去掉,形式为:

UID
2809652
阅读权限
10
在线时间
664 小时
最后登录

[略]

* 个人空间
* 发短消息
* 加为好友
* 当前离线

可以基本认为在"UID"和"* 当前离线"之间的内容都是无用的,可以删除。但是因为这样的地方很多,手工处理很麻烦,于是Joe就想到使用工具来完成这件工作。于是我让Joe把内容存成文本发给我,我使用Ulipad进行了简单地加工。具体的文本内容就不贴了,很大,只是说明我是如何做的。

首先是验证正则式如何写。直接写还是有难度,于是先打开Tools->Live Regular Expression,这是一个动态测试正则式的工具(不知道有几个人知道并用过)?

[ZZ]使用Ulipad进行正则替换处理_第1张图片

可以看到输入的正则式,同时右侧设置了"Multi Line"和"Dot All"标志。匹配上的结果在右下角,内容比较多,拖动可以看到完整的,符合我们的要求。

然后点"Create",生成最终的正则式,结果为:

re.compile(r"UID.+?/* 当前离线", re.S|re.M)

然后按Ctrl+H打开查找替换面板:

[ZZ]使用Ulipad进行正则替换处理_第2张图片

这里输入的是 "(?ms)UID.+?/* 当前离线",前面"(?ms)"是在正则式中设置re.M和re.S标志用的。注意,这里选中了后面的"Regular Expression"标志,因此这时就是进行正则式的处理了。如果你按下箭头(查找框右边的绿色向下的箭头)则可以先进行查找。上图的绿色文字就是找到的结果,看一看没问题。然后点"Replace all"进行全部替换就好了。

后来发现还有一些多的空行,于是又写了一个替换,把"/s*/r/n(?:/s*/r/n)+"替换为"/r/n/r/n"即可。它的作用是把多个空行(每个空行前面可以有空格)替换成一个空格。

经过上面的处理,文本就处理好了。

你可能感兴趣的:([ZZ]使用Ulipad进行正则替换处理)