Skip to main content
 首页 » 编程设计

c#之用于在替换包含数字的组中保留数字的正则表达式

2024年04月30日39JustinYoung

关于可能的欺骗帖子:Replace only some groups with Regex

这不是骗局,因为帖子用静态文本替换了组,我想要的是通过保留组中的文本来替换组。

我有一些文本包含这样的模式:

\super 1 \nosupersub 
\super 2 \nosupersub 
... 
\super 592 \nosupersub 

我想用正则表达式替换它们,使它们变成:

<sup>1</sup> 
<sup>2</sup> 
... 
<sup>592</sup> 

因此,我使用以下正则表达式(注意 (\d+) 组):

RegexOptions options = RegexOptions.Multiline; //as of v1.3.1.0 default is multiline 
mytext = Regex.Replace(mytext, @"\s?\\super\s?(\d+)\s?\\nosupersub\s", @"<sup>\1</sup>", options); 

但是,我没有得到我想要的结果,而是将所有结果替换为 <sup>\1</sup> :

<sup>\1</sup> 
<sup>\1</sup> 
... 
<sup>\1</sup> 

如果我尝试使用像 https://www.sublimetext.com 这样的文本编辑器替换正则表达式并且还使用 Python , 没问题。

如何获取 (\d+) 的组替换像那样(保留数字)在C# ?

请您参考如下方法:

许多正则表达式工具使用 \1 表示法来引用替换模式中的组值(语法与反向引用相同)。无论出于何种原因,Microsoft 选择在正则表达式的 .NET 实现中使用 $1 作为表示法。请注意,反向引用在 .NET 中仍然使用 \1 语法。只是替换模式中的语法不同。参见 this page 的替换部分了解更多信息。