我有 ac# 函数,它在输入端查找文本模式并进行一些处理。(我使用的是 3.5 版本的 .net 框架)
public void func(string s)
{
Regex r = new Regex("^\s*Pattern\s*$", RegexOptions.Multiline | RegexOptions.ExplicitCapture );
Match m = r.Match(s);
//Do something with m
}
Run Code Online (Sandbox Code Playgroud)
该函数的使用可能如下所示
string s = "Pattern \n Pattern \n non-Pattern";
func(s);
Run Code Online (Sandbox Code Playgroud)
但是,我发现有时我的输入看起来更像这样
string s = "Pattern \r Pattern \r non-Pattern"
func(s);
Run Code Online (Sandbox Code Playgroud)
它没有被匹配。有没有办法在正则表达式中\r像 a 一样对待\n?我想我总是可以用\rs替换所有的\ns,但我希望如果我可以让正则表达式一次性完成所有操作,我可以最大限度地减少操作。
不幸的是,当我遇到类似的情况时,我发现有效的唯一情况是我只使用正则表达式执行两次传递(就像您希望避免的那样),第一个将行结尾标准化,然后第二个可以进行搜索像往常一样,我无法找到任何方法来触发Multiline它/r。
public void func(string s)
{
s = Regex.Replace(s, @"(\r\n|\n\r|\n|\r)", "\r\n");
Regex r = new Regex("^\s*Pattern\s*$", RegexOptions.Multiline | RegexOptions.ExplicitCapture );
Match m = r.Match(s);
//Do something with m
}
Run Code Online (Sandbox Code Playgroud)