给出以下html:
<div id="f52_lblQuestionWording" title="" style="width:auto;height:auto; display: inline; overflow: hidden;" >Home telephone</div>
我想使用“家庭电话”字符串自动获取容器div元素的ID,是否有人知道如何通过正则表达式执行此操作?
查找ID的字符串并不总是相同,并且动态生成html,因此可能会不时略有不同。我正致力于使用Selenium自动化公司项目的UI测试。
感谢。
答案 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文件。