C# Watin Find.ByText with Regex

本文关键字:with Regex ByText Find Watin | 更新日期: 2023-09-27 18:20:17

我遇到以下问题:我正在尝试使用Watin的Find.ByText从网页中获取元素。但是,我在C#中没有使用regex。

此语句将返回所需的元素。

return this.Document.Element(Find.ByText("781|262"));

当我尝试使用regex时,我会返回整个页面。

return this.Document.Element(Find.ByText(new Regex(@"781'|262")));

我正在尝试获得这个元素:

<td>781|262</td>

我也试过

return this.Document.Element(Find.ByText(Predicate));
private bool Predicate(string s)
{
  return s.Equals("781|262");
}

上面的工作,而这不是:

 private bool Predicate(string s)
 {
   return new Regex(@"781'|262").IsMatch(s);
 }

我现在意识到,在谓词s中是整个页面的内容。我想问题出在Document.Element上。感谢您的帮助。

C# Watin Find.ByText with Regex

尝试使用:

return this.Document.Element(Find.ByText(new Regex("781''|262")));

return this.Document.Element(Find.ByText(new Regex("781|262")));

选择一个适合你需要的,我不知道"''"这个字符对你来说是否重要。

您不需要字符串是逐字逐句的字符串来实例化regex类。

嗯,我没有意识到Regex也会匹配body/html元素,因为模式显然也包含在其中。我必须通过使用^和$指定文本必须以模式开头和结尾,因此它只匹配所需的元素:

^781'u007c262$

''u007c匹配|,我使用了它,因为MSDN文档也这样做了。

最终代码:

<td>781|262</td>
return Document.TableCell(Find.ByText(new Regex(@"^'d{3}'|'d{3}$")));

Document.TableCell通过只在td元素上尝试Regex来加速搜索。

@用于防止C#将''解释为转义序列。

^用于仅将元素与以以下模式开头的文本相匹配''d{3}匹配didit 0-9 3次

''|匹配|字面意思为

''d{3}匹配数字0-9 3次

$元素也必须以这种模式结束