Visual Studio 2003 中的正则表达式替换问题

Posted

技术标签:

【中文标题】Visual Studio 2003 中的正则表达式替换问题【英文标题】:Problem with regular expression replacement in Visual Studio 2003 【发布时间】:2009-06-25 03:34:16 【问题描述】:

我正在将一些 LaTeX 文档转换为重组文本,并且在 Visual Studio 2003 中使用正则表达式时遇到了一些问题。我正在尝试使用以下 find/ 将 \emphtext 转换为 *text*替换字符串:

\\emph\([^\]*)\ 

*\0*

但是,使用这对我将 \emphtext 转换为 *\emphtext* 这不是我所期望的。当我使用 *\1* 而不是 *\0* 时,我得到 ** 作为替换结果。

关于分组规则我遗漏了什么或不了解什么?

谢谢。

【问题讨论】:

你能发布一个示例文本行来确定吗? 您正在尝试匹配一行并将其替换为其他内容。你能发布一个示例行吗? 我正在尝试替换:应用程序中使用的 \emphselection 语言是 ... 与应用程序中使用的 selection 语言是 ... 【参考方案1】:

我认为在 VS 正则表达式替换语法中,\0 是整个匹配的字符串,而 \1 是第一个捕获的变量的内容(\2 是第二个,依此类推)。因此:

\0

但是,使用这对我得到 \emphtext 转换为 *\emphtext* 这不是我所期望的。

由此确认,\0 是整个匹配的字符串。

当我使用 *\1* 而不是 *\0* 时,我得到 ** 作为替换结果。

可能您没有匹配捕获类中的任何内容。

为了添加更多细节,定义捕获类的语法(在the docs 中称为标记表达式)使用大括号 ,而不是您在此处使用的括号 ()。可能这将用作“查找”表达式:

\\emph\[^\]*\ 

【讨论】:

啊...这正是问题所在。非常感谢。

以上是关于Visual Studio 2003 中的正则表达式替换问题的主要内容,如果未能解决你的问题,请参考以下文章

使用宏删除 VB.NET 代码中的所有注释和空行的 Visual Studio 正则表达式

Visual Studio 正则表达式

在 Visual Studio 中使用正则表达式

在 Visual Studio 中查找和替换正则表达式

在 Visual Studio 中使用正则表达式查找和替换?

Visual Studio C++ 标准正则表达式获取标签直到空格