根据显示的文本查找html元素ID

时间:2009-12-09 18:50:25

标签: regex

给出以下html:

<div id="f52_lblQuestionWording" title="" style="width:auto;height:auto; display: inline;  overflow: hidden;" >Home telephone</div>

我想使用“家庭电话”字符串自动获取容器div元素的ID,是否有人知道如何通过正则表达式执行此操作?

查找ID的字符串并不总是相同,并且动态生成html,因此可能会不时略有不同。我正致力于使用Selenium自动化公司项目的UI测试。

感谢。

3 个答案:

答案 0 :(得分:1)

XPath是从XML和HTML文档中检索值的最简单方法(前提是它们格式正确)。

你想要的表达是:

//div[text() = 'Home telephone']/@id

其中显示“查找文本值等于'家庭电话'的所有div,并为匹配的所有内容返回id属性。”

根据您的语言,通常有几种可用的内置或第三方(和免费)XPath解释器。

使用正则表达式解析HTML是一个坏主意,因为HTML不是常规语言。正则表达式无法处理最简单的HTML边缘情况,因为正则表达式无法正确处理嵌套。 HTML是一种固有的嵌套结构。

答案 1 :(得分:0)

我不确定你使用“家庭电话”字符串是什么意思,但这里有几种方法可以做到这一点:

/id=(.*?)\s+.*(?=Home telephone)/  

如果编程语言支持它,那么(?=)构造是正向前瞻。

另一种方法是简单地使用家庭电话grep,然后使用awk或sed获取id值

答案 2 :(得分:0)

在C#中,你设置了一个如下所示的正则表达式:

string elementText = "Home\\stelephone"; // you can change this as needed
Regex regex = new Regex(
  "id=\"(.*?)\"\\s+.*(?="+ elementText +")",
RegexOptions.IgnoreCase
| RegexOptions.CultureInvariant
| RegexOptions.IgnorePatternWhitespace
| RegexOptions.Compiled
);

// Capture all Matches in the InputText
MatchCollection ms = regex.Matches(InputText);

InputText将是您打开阅读的html文件。