Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用正则表达式进行模式替换_C#_Regex - Fatal编程技术网

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+):

我想用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+):(\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..capturing
cite
会使更换简单..仅此而已..而且它不会恶化性能..因为它不依赖于字符串长度..而且总是只需执行
+2个步骤
(常数..因此没有性能问题)@stribizev很高兴你这么认为:)@stribizev我想你忘了用
$1
替换
$2
。欢迎:P
\$1{$2}