繁体   English   中英

在 C# 中使用什么正则表达式从后面的单词开始匹配(向后匹配...)直到匹配?

[英]What regex to use in C# to start matching from a word BEHIND (matching backwards...) until a match?

让我们说一段 HTML 代码:

<a href="http://google.com">this is a search engine</a>"

如何寻找“引擎”并匹配任何东西,直到达到“这个”?

我知道我可以这样做: this.*?engine - 但这是从左到右匹配,即“向前”匹配,如果这可能的话,我想在这里向后阅读?

您可以反转所有字符串并执行正常搜索:

string text = @"<a href=""http://google.com""> this is a search engine </a>";
string engine = "engine";
string strThis = "this";

new string(
  Regex.Match(
    new string(text.Reverse().ToArray()),
    new string(engine.Reverse().ToArray()) + ".+" + new string(strThis.Reverse().ToArray()))
 .Value
 .Reverse()
 .ToArray())

此外,为了使代码更清晰,您可以在string上定义扩展方法,它反转 string 并返回string而不是IEnumerable<char> 请参阅以供参考。

首先,始终使用专用工具解析 HTML,请参阅在 C# 中解析 html 的最佳方法是什么? 对于可能的选择。

解析 HTML 后,您可以获得纯文本来运行您的正则表达式。

您仍然可以使用this.*?engine regex启用RegexOptions.RightToLeft选项,可能与RegexOptions.Singleline结合使用以匹配两个单词之间的任何字符:

var result = Regex.Match(text, @"this.*?engine", RegexOptions.Singleline | RegexOptions.RightToLeft)?.Value;

请参阅在线正则表达式演示

根据文档, RegexOptions.RightToLeft

获取一个值,该值指示正则表达式是否从右向左搜索。

C# 演示

var text = "blah blah this is a this search engine blah";
var result = Regex.Match(text, @"this.*?engine", 
        RegexOptions.Singleline | RegexOptions.RightToLeft)?.Value;
Console.WriteLine(result); // => this search engine

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM