C#正则表达式匹配任何字符?

34
在C#中,我将包括回车符在内的以下字符串写入一个字符串变量:
asdfasdfasdf
asdfas<test>asdfasdf

asdfasdf<test>asdfasdf

在Notepad2中,我使用这个正则表达式:

<test>.*<test>

它按预期选择了这个文本:

<test>asdfasdf

asdfasdf<test>

然而,在C#中这样做:

System.Text.RegularExpressions.Regex.Replace(s, "<test>.*<test>", string.Empty);

它并不会删除该字符串。但是,当我在一个没有回车符的字符串上运行此代码时,它确实起作用。

所以我正在寻找一种正则表达式,它将匹配任何字符,无论它是控制代码还是普通字符。

3个回答

60
你忘记指定正则表达式操作(具体来说,是 . 运算符)应该匹配所有字符(而不是除了\n之外的所有字符):
System.Text.RegularExpressions.Regex.Replace(s, "<test>.*<test>", string.Empty, RegexOptions.Singleline);

你只需要添加 RegexOptions.Singleline 就可以了。


1
哈!你说得对!当stackoverflow允许时,我会在10分钟内将你的回答标记为答案=P。 - oscilatingcretin

13
使用单行模式:
Regex.Replace(s, "<test>.*<test>", "", RegexOptions.Singleline);

0
你可以移除字符串中的换行符,然后进行匹配:
s = s.Replace(Environment.NewLine, "");

然后它应该按预期工作:

System.Text.RegularExpressions.Regex.Replace(s, "<test>.*<test>", string.Empty);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接