C# 使用正则表达式进行模式替换
我想用C#中的正则表达式将C# 使用正则表达式进行模式替换,c#,regex,C#,Regex,我想用C#中的正则表达式将[cite:lamport94]替换为\cite{lamport94} 这是您可以使用的代码。它将捕获方括号内带有“:”分隔符的任何字母数字字符串: var input = "how easy it is to create a well structured document within [cite:lamport94]. You should quickly be able to see."; var rxReg = new Regex(@"\[(\w+):
[cite:lamport94]
替换为\cite{lamport94}
这是您可以使用的代码。它将捕获方括号内带有“:”分隔符的任何字母数字字符串:
var input = "how easy it is to create a well structured document within [cite:lamport94]. You should quickly be able to see.";
var rxReg = new Regex(@"\[(\w+):(\w+)]");
var result = rxReg.Replace(input, @"\$1{$2}");
输出:
how easy it is to create a well structured document within \cite{lamport94}. You should quickly be able to see.
顺便说一句,如果括号中不仅仅有[a-zA-Z0-9.]
字符,您可以将\w
扩展到[\w.:-]
(我更喜欢匹配的模式是mm.xxx
,或者xx-yy
,或者xx:yyyyy
字符串。如果需要,可以添加更多(请注意,连字符必须保留在字符类的末尾才能保留文字连字符)
要仅限于引用,请使用它而不是第一个\w
:
var rxReg = new Regex(@"\[cite:(\w+)]");
var result = rxReg.Replace(input, @"\cite{$1}");
您可以使用以下选项进行匹配:
\[(cite):(.*?)\] //assuming you always have cite as common
并替换为
\$1{$2}
您的字符串中总是有一个
[]
和一个:
?不可以有一个或多个出现的[cite:xyz]\\\1{\2}
不是C兼容的替代字符串。谢谢,这正是我要找的。@AnkanKumarGiri:您不必在(cite)周围添加捕获组
,它会降低性能。您可以直接在替换模式中使用它。请参阅我对正则表达式的更新,其中cite
用作正则表达式中的文字字符串。此外,如果我没有提到替换字符串的问题,此解决方案对您根本不起作用。@Stribizev..capturingcite
会使更换简单..仅此而已..而且它不会恶化性能..因为它不依赖于字符串长度..而且总是只需执行+2个步骤
(常数..因此没有性能问题)@stribizev很高兴你这么认为:)@stribizev我想你忘了用$1
替换$2
。欢迎:P
\$1{$2}