正则表达式工具Expresso的使用与代码生成

正则表达式是一种强大的文本处理工具,它可以用来解析、编辑和替换文本。尽管正则表达式的语法复杂,容易出错,但它们在需要搜索文本中的复杂模式以提取或编辑文本部分时非常有用。在开发使用正则表达式的代码时,发现在单独的工具中创建和调试表达式非常有用,以避免耗时的编译/调试周期。Expresso就是这样一个工具,它允许执行以下操作:

  • 通过从调色板中选择组件来构建复杂的正则表达式
  • 对真实或样本输入数据进行表达式测试
  • 以树状结构显示所有匹配项,显示捕获的组以及组内的所有捕获
  • 构建替换字符串并测试匹配和替换功能
  • 在输入数据中高亮显示匹配的文本
  • 自动测试语法错误
  • 生成可以直接集成到程序中的Visual Basic或C#代码
  • 读取或保存正则表达式和输入数据

正则表达式是对Unix、MSDOS、Perl、AWK等系统中用户已经熟悉的"通配符"语法的复杂泛化。例如,在MSDOS中,可以说:

dir *.exe

以列出所有具有.exe扩展名的文件。在这里,星号是一个通配符,可以匹配任何字符字符串,而点是一个字面量,仅匹配一个点。数十年来,当需要搜索文本中的复杂模式以提取或编辑文本部分时,更复杂的系统已经被广泛使用。.NET框架提供了一个名为Regex的类,可以用来使用正则表达式进行搜索和替换操作。例如,在.NET中,假设想找到文本字符串中的所有单词。表达式\w将匹配任何字母数字字符(以及下划线)。星号字符可以附加到\w上,以匹配\w的任意数量的重复,因此\w*匹配所有包含仅字母数字字符(和下划线)的任意长度的单词。

Expresso工具箱

Expresso提供了一个工具箱,可以使用一组标签页从中选择任何语法元素来构建正则表达式。构建表达式后,可以读取样本数据或手动输入,然后对该数据运行正则表达式。搜索结果随后显示,显示了Regex支持的命名组的层次结构。该工具还允许测试替换字符串,并生成可以直接插入到C#或Visual Basic .NET程序中的代码。

使用Expresso构建和测试正则表达式

要使用Expresso,请下载并运行可执行文件,该文件需要.NET框架。如果想探索代码,请下载并提取源文件,在Visual Studio .NET中打开解决方案,然后编译并运行程序。Expresso将从预加载的样本数据开始(参考上图)。创建自己的正则表达式或从列表框中选择一个示例。单击"Find Matches"以测试正则表达式。匹配项以树状结构显示在"Results"框中。可以通过展开加号来显示多个组和捕获,如上图所示。

Expresso的代码生成

一旦正则表达式经过彻底调试,可以通过在"Code"菜单中选择适当的选项来生成代码。例如,要生成用于查找日期的正则表达式的代码,请创建以下正则表达式(或从下拉列表中选择此示例):

(?\d{1,2})/(?\d{1,2})/(?(?:\d{4}|\d{2}))

通过从"Code"菜单中选择"Make C# Code",将生成以下代码。它可以保存到文件中,或复制粘贴到C#程序中,以创建一个Regex对象,该对象封装了这个特定的正则表达式。请注意,正则表达式本身和所有选定的选项都构建到了新对象的构造函数中:

using System.Text.RegularExpressions; Regex regex = new Regex( @"(?\d{1,2})/(?\d{1,2})/(?(?:\d{4}|\d{2}))", RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled );

有趣的点

在创建这个工具之后,发现了Eric Gunnerson设计的Regex Workbench,它旨在实现相同的目的。Expresso在构建表达式和显示匹配项的可读性方面提供了更多帮助(在看来),但Eric的工具有一个不错的功能,即显示Tooltips,解码表达式中子表达式的含义。如果对正则表达式很认真,请尝试这两个工具!

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485