正则表达式从字符串中选择第一次出现的电话号码

时间:2015-08-23 00:49:05

标签: .net regex

我正在尝试创建一个正则表达式,从该字符串中抓取第一次出现的电话号码:

<font color="#848484">Transferor(s)</font>
<br />Harzuz Holdings Ltd<br />Ontario Potato Inc&nbsp; &nbsp; &nbsp;905-791-7735<br />
<em>Clark Packaging Products Inc</em>
<p>
</p>Pres: Jay Burstein<br />8 Tracey Blvd, Unit 2<br />Brampton, Ontario<br />L6T 5R9<p>
</p>
<font color="#848484">Transferee(s)</font>
<br />2470347 Ontario Inc&nbsp; &nbsp; &nbsp;416-223-4403<br />

电话号码的格式始终如下:999-999-9999。我遇到的问题是,当我只想抓住第一个时,我的正则表达式是从我的字符串中抓取两个电话号码。这是我到目前为止所尝试的:

(\d\d\d-\d\d\d-\d\d\d\d) ?会返回多个电话号码

(\d\d\d-\d\d\d-\d\d\d\d) {1}也会返回多个电话号码

我可以用什么正则表达式来选择第一个电话号码?我可以用什么正则表达式来选择第二个电话号码?

我正在使用uBot这是一种Windows自动化软件。这是我尝试过的代码,但这些代码都不适用于我:

set(#phone1, $find regular expression(#x, "\\d\\d\\d-\\d\\d\\d-\\d\\d\\d\\d ?"), "Global")
set(#phone2, $find regular expression(#x, "(\\d\\d\\d-\\d\\d\\d-\\d\\d\\d\\d)\{1\}"), "Global")

2 个答案:

答案 0 :(得分:1)

由于这是一个多行字符串,它有换行符,你可以使用它来区分第一个出现(在一行中以换行符号结尾:\n)和最后一个:

(\d{3}-\d{3}-\d{4})(?=.*\n)

environment that tests regex in .Net

中进行测试

答案 1 :(得分:1)

现在,我想您知道如何识别电话号码,但问题是您如何知道哪一个是第一个?

比说出&#34; first&#34; 更好的方法,我建议您将电话号码模式绑定到关键字&#34; Transferor&#34; 相反,这是更多的语义,因此我们得到一个模式

(?<=Transferor)[\s\S]*(\d{3}-\d{3}-\d{4})

<强>解释

(?<=Transferor)检查是否有单词&#34;转移者&#34;前,

[\s\S]*任意字符串,包括换行符,

(\d{3}-\d{3}-\d{4})电话号码。

现在Transferor的电话号码存储在$1变量中。

请注意,上面的正则表达式只是一个标准表单,请根据.NET进行编辑。