C# 需要有关正则表达式的帮助,而不是替换表达式的所有实例吗
在这件事上我一整天都在碰壁,对此我几乎不知所措。寻找一些新的视角 示例输入文本:C# 需要有关正则表达式的帮助,而不是替换表达式的所有实例吗,c#,regex,C#,Regex,在这件事上我一整天都在碰壁,对此我几乎不知所措。寻找一些新的视角 示例输入文本: (为清晰起见添加了换行符,而不是在实际数据中) 问题(最后) 有人知道为什么它要取代《我的小说》和《第二章》,而不是《第一章》吗 很抱歉,这篇文章太长了,希望我没有为了便于阅读而试图对其进行格式化 更新: 还有一件事可能会有帮助。在“Novel”之后添加一个额外的break标记可以使提供的代码完美地开始工作。还不知道为什么 示例输入文本(已修改): </div>#My Novel<br />
(为清晰起见添加了换行符,而不是在实际数据中) 问题(最后)
有人知道为什么它要取代《我的小说》和《第二章》,而不是《第一章》吗 很抱歉,这篇文章太长了,希望我没有为了便于阅读而试图对其进行格式化 更新: 还有一件事可能会有帮助。在“Novel”之后添加一个额外的break标记可以使提供的代码完美地开始工作。还不知道为什么 示例输入文本(已修改):
</div>#My Novel<br /><br />
##Chapter1<br />
It was a dark and stormy night<br />
##Chapter 2<br />
The End
#我的小说
##第1章
那是一个漆黑的暴风雨之夜
##第二章
结局
这是一个经过实际测试并似乎有效的方法
问题是,一旦找到匹配项,搜索就会在第一个匹配项停止的地方继续进行。因此,#我的小说
的结尾
将不会再次被捕获,因此错过了#第1章
要捕获类似于第1章的构造,我们可以使用。Lookbehinds强制前缀的存在,即使它在当前位置之前扩展。这还可以防止将其放入替换字符串中:
- 将
替换为(?
(?为什么数据以结束标记开始?原始输入数据通常会更长,但由于我没有匹配第一个结束标记之前的任何内容,因此我在示例中省略了它,以便于阅读。如果它让您感觉更好,请用
替换标记。问题是相同的。您就是那个人!Lookback断言工作正常你还应该能够用前瞻性断言替换
):(?
(?=
</div><h1>My Novel</h1><br /> <h1>Chapter1</h1><br /> It was a dark and stormy night<br /> <h1>Chapter 2</h1><br /> The End
</div><h1>My Novel</h1><br /> ##Chapter1<br /> It was a dark and stormy night<br /> <h1>Chapter 2</h1><br /> The End
(?<preamble> ( ([<]\/\w+\d*[>])|([<]\w+\d*\s*\/[>]) #</tag> or <tag /> ) \s* #optional whitespace ) (?<hashmarks> \#{1,6} #1-6 hash marks ) (?<content> .+? #header content ) (?<closing> ([<](br|\/\s*br|br\s*\/)[>]) #<br>,</br>, or <br /> )
${preamble}<h1>${content}</h1>${closing}
Regex.Replace(Source,SrchExp,ReplExpr,RegexOptions.IgnoreCase)
</div>#My Novel<br /><br /> ##Chapter1<br /> It was a dark and stormy night<br /> ##Chapter 2<br /> The End
(?<= # removed the preamble capture and replaced with a lookbehind ( ([<]\/\w+\d*[>])|([<]\w+\d*\s*\/[>]) #</tag> or <tag /> ) \s* #optional whitespace ) (?<hashmarks> \#{1,6} #1-6 hash marks ) (?<content> .+? #header content ) (?<closing> ([<](br|\/\s*br|br\s*\/)[>]) #<br>,</br>, or <br /> )
<h1>${content}</h1>${closing}
</div><h1>My Novel</h1><br /> <h1>Chapter1</h1><br /> It was a dark and stormy night<br /> <h1>Chapter 2</h1><br /> The End