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

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

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

*\0*

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

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

谢谢。

【问题讨论】:

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

标签: regex visual-studio-2003


【解决方案1】:

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

\0

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

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

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

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

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

\\emph\{{[^\}]*}\} 

【讨论】:

  • 啊...这正是问题所在。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2011-12-21
  • 2016-09-03
  • 1970-01-01
  • 2011-09-07
  • 2011-03-09
  • 2020-05-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多