获取未知字符串之间的值

时间:2015-03-03 00:22:46

标签: c# regex

我正在尝试在另外两个字符串之间拉出一个字符串。但为了使其更加复杂,进程内容往往会有所不同。

enter image description here

我想要检索的字符串是基督城

我到目前为止的正则表达式是(?<=300px">).*(?=</td),它会拉出我看起来很好的字符串,但它也会在我正在搜索的LARGE文本文件中返回许多其他字符串。

我想做的是限制前缀从 Office 开始,一直到 300px“&gt; ,但内容之间这两个字符串有时会因用户偏好而有所不同。

要将其置于粗糙的非正则表达式术语中,我想执行以下操作:从Office:开始一直到300px>找到从此处开始并以</td结尾的字符串。因此导致基督城

4 个答案:

答案 0 :(得分:3)

您是否考虑过使用HTMLAgilityPack?它是一个用于处理HTML的Nuget包,它能够很好地处理格式错误的HTML。 Stack Overflow上的大多数建议不要使用Regex for HTML - 请参阅此处:RegEx match open tags except XHTML self-contained tags

以下是您为自己的榜样做的事情:

using HtmlAgilityPack; //This is a nuget package!
var html = @"<tr >
               <td align=""right"" valign=""top""><strong>Office:</strong>&nbsp; </td>
               <td align=""left"" class=""stippel"" style=""white-space: wrap;max-width:300px"">Christchurch </td>
             </tr>";

var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(html);

var node = htmlDoc.SelectSingleNode("//td[@class='stippel']");
Console.WriteLine(node.InnerHtml);

我还没有测试过这段代码,但它应该做你需要的。

答案 1 :(得分:0)

您遇到的问题是*贪婪。使用懒惰/不情愿的版本*?

Office:[\s\S]*?300px">(.*?)</td

此解决方案使用组匹配而不是环顾。

答案 2 :(得分:0)

我猜你需要这样的东西:

office.*\n.*|(?<=300px">).*(?=<\/td)

答案 3 :(得分:0)

感谢adamdc78和greg的帖子,我已经能够提出以下正则表达式。这正是我所需要的。

谢谢你的帮助。

(?<=office.*\n.*300px">).*(?=<\/td)