(对于那些遇到同样情况的人,请注意这个问题可能是。net和c#指定的。)见下面Wiktor的回答)
在问这个问题之前,我读了很多相关的问题(包括这个:匹配换行符- n或rn?),但这些答案都不起作用。
在我的例子中,我想删除一些代码文件中的所有//注释。为了处理Mac, Unix, Windows中的文件,我需要一些东西来匹配//和/r,或/n,或/r/n之间的文本。
下面是代码文件的测试内容:var text = "int rn = 0; //comment1.0rn" +
"int r = 0; //comment2.r" +
"int n = 0; //comment3.n" +
"end";
var txt = RemoveLineEndComment();
这里是正则表达式(如果你不是一个C字符,只关注正则表达式请):
public static class CommentRemover
{
private static readonly Regex RegexRemoveLineEndComment =
new(@"//.*$", RegexOptions.Multiline);
public static string RemoveLineEndComment(this string text)
{
var t = RegexRemoveLineEndComment.Match(text).Value;
return RegexRemoveLineEndComment.Replace(text, string.Empty);
}
}
我需要的是txt = "int rn = 0;r int r = 0; print n = 0; nend"。以下是正则表达式和相应的结果:
//。* $ =比;Txt ="int rn = 0; int r = 0; nend"(int n = 0缺失)
//. * (? = r n) =比;Txt ="int rn = 0;r int r = 0;//comment2。 print n = 0;//comment3 nend"(注释2和3是左)
//. * (= r n ?) =比;Txt ="int rn = 0; int r = 0; nend"(int n = 0缺失)
//.*(?=( r n | | r n)) =比;Txt ="int rn = 0; int r = 0; nend"(int n = 0缺失)
//.*(?=[ r n | | r n]) =比;Txt ="int rn = 0; int r = 0; nend"(int n = 0缺失)…
似乎r有问题,无法识别。如果我只使用rn,则正则表达式&;//.*(?=rn)&;下面的测试内容可以正常工作:
var text = "int rn = 0; //comment1.0rn" +
"int r = 0; //comment2.rn" +
"int n = 0; //comment3.rn" +
"end";
谁来帮我一下?谢谢你的帮助。
在。net中,.
模式匹配回车(CR)字符。它匹配除LF字符以外的任何字符。
注意,没有选项或修饰符来重新定义这个.
行为。
var RegexRemoveLineEndComment = new Regex(@"//[^rn]*", RegexOptions.Multiline);
参见c#演示。
如果您想要删除//
之前的空白,请在模式开始处添加s*
(任何空白)或[p{Zs}t]*
(水平空白)。