我该怎么解析这个?

时间:2015-02-10 00:29:49

标签: c# html regex

我的电子邮件如下:

  

我们收到了将您的电子邮件地址更改为example@thisexample.com的请求。

     

要完成此过程,请输入以下验证码验证您的电子邮件地址。

     

86761G

     

此代码是临时的,将在30分钟后过期。

     

如果您没有要求,您的帐户信息将保持不变。无需采取进一步行动。

     

热烈的问候,   Example.com

我需要解析验证码:86761G。抓住代码是动态的,意味着它正在发生变化。虽然电子邮件的布局是静态的,但我的想法是通过新的线索引[2]抓住它(尽管看起来它之间有空格,它是Div中的第三个<p>标签。 [2]通过新线索引)。 或者我的另一个想法是通过HTML以某种方式(不要真的想使用HTMLAgilityPack)。 Div:

的HTML如下所示
<td colspan="2" style="padding:1.2em 45px 2em 45px;color:#000;font-   family:Corbel, 'Trebuchet MS', 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:.875em;line-height:1.1em;">
<p>We’ve received a request to change your email address to example@thisexample.com.</p>
<p>To complete the process, please verify your email address by entering the following verification code.</p>
<p>86761G</p>
<p>This code is temporary and will expire in 30 minutes.</p>
<p>If this wasn’t requested by you, your account information will remain unchanged. No further action is required.</p>


<p>Warm regards,<br>
example.com</p>
</td>

知道如何解析这些数据吗?尽管我知道正则表达式不适用于HTML,因为它不是常规文本,但我正在考虑正则表达式。如果我需要HTMLAgilityPack,我会使用它,如果不是,我不喜欢。谢谢你们!

哦注意事项 - 我正在通过Selenium使用Firefox,所以总是可以选择使用它的内置函数以某种方式获取它吗?

编辑:我太蠢了。 Selenium - FindElementbyXPath(facepalm)

4 个答案:

答案 0 :(得分:1)

与流行(以及错误的,imo)观点相反,您可以使用正则表达式来提取这一点,因为该文档的总体结构实际上符合要求被视为常规语法(http://en.wikipedia.org/wiki/Chomsky_hierarchy

这是我要使用的正则表达式:

following verification code.</p>\s*<p>(\S+)</p>

注意缺少任何锚点(^$),它使用已知文本“跟随验证码”来匹配代码之前。验证码随后包含在单个正则表达式组中。

答案 1 :(得分:1)

如果您使用的是硒,最简单的方法是将它与以下css选择器匹配:p:nth-​​child(3)

答案 2 :(得分:0)

由于您之前只提到验证码部分是动态的,因此我假设整个标记结构不会发生变化。

如果是这样,您可以使用

<p>(.*?)<\/p>

这将捕获<p>个标签,第三个捕获的组是您的验证码。

答案 3 :(得分:0)

如果电子邮件始终完全相同,您可以使用以下正则表达式接受更改代码:

(?<d>\<p\>[\S^\.]*</p\>)

如果它更复杂,你可以这样做:

(?<d>\<p\>.*</p\>)

将找到所有段落行,然后您可以通过消除常量字符串来迭代并找到代码,如:

  

要完成此过程,请输入以下验证码验证您的电子邮件地址。