【发布时间】:2013-06-19 00:12:09
【问题描述】:
我需要替换一个字符串,它跟在一个特定的字符串和一些不同的数据之后。我需要保留开头和中间,只替换结尾。当我尝试下面的代码时,它只替换最后一次出现。我尝试切换到非贪婪匹配,但没有找到它。中间可以包含新行以及空格、字母和数字。
String s = "Beginning of story. Keep this sentence. Old ending.\n";
s += s;
s += s;
s1 = Regex.Replace(s, @"Beginning of story. ([\s\S]*) Old ending.", "Beginning of story. " + @"$1" + " New ending.", RegexOptions.Multiline | RegexOptions.IgnoreCase);
The result is this:
Beginning of story. Keep this sentence. Old ending.
Beginning of story. Keep this sentence. Old ending.
Beginning of story. Keep this sentence. Old ending.
Beginning of story. Keep this sentence. New ending.
如何替换每次出现的“旧结局”。
【问题讨论】:
-
尝试在模式的末尾添加一个
$- 应该匹配每一行的末尾,给定您的Multiline选项。 -
非贪婪匹配应该处理它。您能展示一下您的尝试吗?
-
我试过这个。它不会替换任何东西 s1 = Regex.Replace(s, @"故事开始。([\s\S]?) 旧结局。", "故事开始。" + @"$1" + " 新结局。 ", RegexOptions.Multiline | RegexOptions.IgnoreCase);
-
@BrianK:我认为非贪婪匹配将是
*?,而不仅仅是?-?本身是0 or 1。