关于在“任意”定界符之间替换文本文件的某些部分,我遇到了一个问题。

这是我想要做的:我有如下标记:

//   [ADX START] ANYTHING //   [ADX END]

<!--    [ADX START] --> ANYTHING <!-- [ADX END]  -->

/*
 [ADX START] */  ANYTHING /*  [ADX END]        */


因此,这些是不同的评论样式,我想抓住开头的[ADX START](包括周围的评论),然后是中间的文本,最后是最后的[ADX END]。

因此,我给它一个像这样的文本文件:

test.php:
<?php
BEFORE
// [ADX START]
REMOVEME
// [ADX END]
AFTER

test.css:
BEFORE
/* [ADX START]*/
REMOVEME
/*[ADX END] */
AFTER


成为:

test.php:
<?php
BEFORE
AFTER

test.css:
BEFORE
AFTER


等等。如您所见,注释样式和定界符之间可以有任意数量的空格(或没有空格)。

因此,到目前为止我想到的是以下内容:

string newFileContent = Regex.Matches(fileContent, "(\\[ADX START\\].*\\[ADX END\\])", RegexOptions.IgnoreCase);


但是,这没有任何作用。我认为使我绊倒的是括号等。此外,我希望能够简单地加入不同的注释样式,例如#,//,/ ** /等;

朝正确方向的任何指针将不胜感激。

最佳答案

像这样使用singline选项和正则表达式

string strRegex =@"(\/\/|\/\*).*?\[ADX START\].*?\[ADX END\]\s*(\*\/)?";
                         ^                      ^                 ^
                         |                      |                 |->match */ 0 or 1 time
                         |                      |
                         |                      |->match lazily till the first ADX END
                         |->match // or /*
string s=Regex.Replace(fileContent,strRegex,"",RegexOptions.Singleline);//replace it

09-29 21:18