假设我有以下字符串:
string input = "Hello world\n" +
"Hello foobar world\n" +
"Hello foo world\n";
我有一个正则表达式模式 (由我正在编写的工具用户指定): "foobar"
我希望返回与表达式foobar
匹配的每一行的整个行。在这个例子中,输出应该是 Hello foobar world
.
如果模式是"foo"
,我想要返回:
Hello foobar world
Hello foo word
这可行吗?
我已经有的代码是:
string pattern = "foobar";
Regex r = new Regex(pattern)
foreach (Match m in r.Matches(input))
{
Console.WriteLine(m.Value);
}
运行此代码将会输出:
foobar
而不是:
Hello foobar world
如果 string pattern = "foo";
,则输出为:
foo
foo
而不是:
Hello foobar world
Hello foo world
我也尝试过:
// ...
Console.WriteLine(m.Result("$_")); // $_ is replacement string for whole input
// ...
但这会导致在字符串中每个匹配(当模式为foo
时)都返回整个input
:
Hello world
Hello foobar world
Hello foo world
Hello world
Hello foobar world
Hello foo world
input.Split('\n')
中的每一行运行正则表达式,而如果用户指定了输出模式,则只对input
运行。你的解决方案更简单。 - dx_over_dt