论文部分内容阅读
2008年第6期,挑战题目4是“URL链接提取器”:现在有放在不同文件夹下的一堆文件(多种类型),现在我要提取这些文件夹下TXT文件中的字符,制作两个文本:
文件一,所有包含有URL链接的整段文字。
文件二,所有URL链接的字符。
要提取一些像URL链接这样的有一定规律性的文字时,使用正则表达式是最合适的。可是我们如何使用一个正则表达式来表示所有的URL地址呢?在EmEditor中依次选择“工具→所有配置属性”菜单项,在“链接”标签下,我们可以看到EmEditor识别URL链接的两个规则:
①如果文字是以http://、https://、ftp://、file:和mailto:开始,并且紧随其后的文字是“识别这些字符”中的定义的字符时,它们将会被看做是一个链接。
②如果链接最后的一个文字是在“不允许在行末的字符”中所定义的字符时,则不应将它当做是链接的一部分。
有了这2个识别URL链接的规则,我们就能使用以下两种方法,提取TXT文件中的URL链接了。
方法一:使用EmEditor+宏
这个方法主要是使用文本编辑工具EmEditor来实现的。
1.生成文件一
在EmEditor中选择“搜索→在文件中查找”菜单,在随后弹出的对话框里,在“查找”文本框处输入“((https?:\/\/)|(ftp:\/\/)|(file:)|(mailto:))[!#%&,-:;=@_~\d\w\$\'\(\)\*\+\.\/\?\^\\]+”(不含外侧的双引号,下同)。在“文件类型”处输入“*.txt”。在“在文件夹”处输入要搜索的文件夹的路径。同时要选中“查找子文件夹”和“使用正则表达式”这两个选项。最后点击“查找”按钮(见图1)。
图1
搜索完毕后,所有包含有URL链接的整段文字就显示在结果中了,我们可以将其保存为文件一。
2.生成文件二
打开EmEditor,输入以下的代码,并将其扩展名改为VBEE,如“GetURL.vbee”。
strURLS = ""
Set regEx = New RegExp
regEx.Pattern = "((https?:\/\/)|(ftp:\/\/)|(file:)|(mailto:))[!#%&,-:;=@_~\d\w\$\'\(\)\*\+\.\/\?\^\\]+"
regEx.IgnoreCase = True
regEx.Global = True
document.selection.SelectAll '选中整个文档。
Set colURLS = regEx.Execute(document.selection.Text) '查找文档中所有的URL。
For Each objURL In colURLS
strURLS = strURLS & TailTrim(objURL.Value) & vbcrlf
Next
document.selection.Text = strURLS '将所有的URL写入当前文档。
Function TailTrim(strURL)
regEx.Pattern = "([!:;,\'\(\)\.\?]*)$"
Set colMatches = regEx.Execute(strURL)
TailTrim = Left(strURL, colMatches(0).FirstIndex)
End Function
在EmEditor中选择“宏→选择”菜单,然后选择上面所创建的GetURL.vbee文件。
最后,打开刚刚生成的“文件一”,点击“宏→运行 GetURL.vbee”菜单项。这样,搜索结果就会仅包含URL链接,我们只需要将结果另存为“文件二”即可。
方法二:使用VBS脚本
如果大家嫌方法一不够方便也没关系,我还编写了一个VBS脚本,可以搜索TXT文件中的URL链接,并将它们提取到指定的文件中。使用方法很简单:运行SearchURL.vbs文件,然后选择要搜索的文件夹就可以了(见图2)。搜索完毕后,结果会被保存到脚本文件所在目录下的“File1.txt”和“File2.txt”中。
图2
本文所说的宏文件GetURL.vbee及脚本文件SearchURL.vbs均可直接下载:http://work.newhua.com/cfan/200809/Code.rar,快车代码:CF0809WJTZ01。
文件一,所有包含有URL链接的整段文字。
文件二,所有URL链接的字符。
要提取一些像URL链接这样的有一定规律性的文字时,使用正则表达式是最合适的。可是我们如何使用一个正则表达式来表示所有的URL地址呢?在EmEditor中依次选择“工具→所有配置属性”菜单项,在“链接”标签下,我们可以看到EmEditor识别URL链接的两个规则:
①如果文字是以http://、https://、ftp://、file:和mailto:开始,并且紧随其后的文字是“识别这些字符”中的定义的字符时,它们将会被看做是一个链接。
②如果链接最后的一个文字是在“不允许在行末的字符”中所定义的字符时,则不应将它当做是链接的一部分。
有了这2个识别URL链接的规则,我们就能使用以下两种方法,提取TXT文件中的URL链接了。
方法一:使用EmEditor+宏
这个方法主要是使用文本编辑工具EmEditor来实现的。
1.生成文件一
在EmEditor中选择“搜索→在文件中查找”菜单,在随后弹出的对话框里,在“查找”文本框处输入“((https?:\/\/)|(ftp:\/\/)|(file:)|(mailto:))[!#%&,-:;=@_~\d\w\$\'\(\)\*\+\.\/\?\^\\]+”(不含外侧的双引号,下同)。在“文件类型”处输入“*.txt”。在“在文件夹”处输入要搜索的文件夹的路径。同时要选中“查找子文件夹”和“使用正则表达式”这两个选项。最后点击“查找”按钮(见图1)。
图1
搜索完毕后,所有包含有URL链接的整段文字就显示在结果中了,我们可以将其保存为文件一。
2.生成文件二
打开EmEditor,输入以下的代码,并将其扩展名改为VBEE,如“GetURL.vbee”。
strURLS = ""
Set regEx = New RegExp
regEx.Pattern = "((https?:\/\/)|(ftp:\/\/)|(file:)|(mailto:))[!#%&,-:;=@_~\d\w\$\'\(\)\*\+\.\/\?\^\\]+"
regEx.IgnoreCase = True
regEx.Global = True
document.selection.SelectAll '选中整个文档。
Set colURLS = regEx.Execute(document.selection.Text) '查找文档中所有的URL。
For Each objURL In colURLS
strURLS = strURLS & TailTrim(objURL.Value) & vbcrlf
Next
document.selection.Text = strURLS '将所有的URL写入当前文档。
Function TailTrim(strURL)
regEx.Pattern = "([!:;,\'\(\)\.\?]*)$"
Set colMatches = regEx.Execute(strURL)
TailTrim = Left(strURL, colMatches(0).FirstIndex)
End Function
在EmEditor中选择“宏→选择”菜单,然后选择上面所创建的GetURL.vbee文件。
最后,打开刚刚生成的“文件一”,点击“宏→运行 GetURL.vbee”菜单项。这样,搜索结果就会仅包含URL链接,我们只需要将结果另存为“文件二”即可。
方法二:使用VBS脚本
如果大家嫌方法一不够方便也没关系,我还编写了一个VBS脚本,可以搜索TXT文件中的URL链接,并将它们提取到指定的文件中。使用方法很简单:运行SearchURL.vbs文件,然后选择要搜索的文件夹就可以了(见图2)。搜索完毕后,结果会被保存到脚本文件所在目录下的“File1.txt”和“File2.txt”中。
图2
本文所说的宏文件GetURL.vbee及脚本文件SearchURL.vbs均可直接下载:http://work.newhua.com/cfan/200809/Code.rar,快车代码:CF0809WJTZ01。