我基本上希望将搜索限制为字符串的特定部分。我不知道这是否可以用正则表达式,但我还没有找到任何说它不可能!我发现的帖子是我发现很难推断我使用的情况,或者他们依靠非正则表达式函数来完成这项工作。
我的意思的一般例子是:
鉴于书籍的全文,请在第1章和第2章之间返回 的所有实例
以上示例不是我的预期用法,但我想以一般方式提出要求,以便后代可以轻松地将任何答案应用于自己的目标。
我的目标是使用C#Regex.Replace函数。我想为它提供整个字符串,并让它只替换字符串的特定部分的匹配。
我当然可以通过拆分字符串,仅将相关部分提供给Regex.Replace,然后使用StringBuilder重新组装它来完成此操作。但如果有可能用纯粹的正则表达式实现这一点,我不想这样做。
以下是此情况的一些示例输入,其中所需的匹配项为粗体:
序言下面的故事是为了你阅读第1章 快速棕色狐狸跳过 懒狗第2章狗死了第11章唐'请问第21章末尾的遗失章节
答案 0 :(得分:2)
是的,.NET正则表达式引擎允许lookaround assertions无限期重复,使这成为可能:
resultString = Regex.Replace(subjectString, @"(?<=\bChapter 1\b.*)\bthe\b(?=.*\bChapter 2\b)", "ye", RegexOptions.Singleline);
<强>解释强>
(?<= # Assert that it's possible to match this before the current position:
\bChapter 1\b # the text "Chapter 1" (but not "Chapter 11")
.* # followed by any number of characters.
) # End of lookbehind assertion.
\bthe\b # Match "the" (but not "there" or "lathe").
(?= # Assert that it's possible to match this after the current position:
.* # any number of characters, followed by
\bChapter 2\b # the text "Chapter 2"
) # End of lookahead assertion.