【发布时间】:2017-06-19 17:27:59
【问题描述】:
所以,我编写了一个正则表达式来获取英国电话号码,如下所示:
[(]*\d{3}[)]*\s*[.\-\s]*\d{3}[.\-\s]*\d{4}
它完美地捕捉电话号码,但是如果我提供的列表包含一个超过 11 位数字的号码etc: 01234567891011121314,它将获取该号码的前 11 位数字。
我想完全排除这个数字,而不是获取前 11 位数字。
我怎样才能修改我的表达来实现这一点?
谢谢
编辑: 对于上下文: 正则表达式用于从网站源代码中获取电话号码,因此数字可以被任何字符包围,我只想捕获那些周围没有数字的数字(使其超过 11 位)
编辑 2: 以下是一些透视源代码:
<a class="social" href="https://www.facebook.com/pages/x-Ltd/194636607281565" target="_blank" title="Like us on facebook">
<i class="icon icon-facebook"></i>
</a>
<p>123 Sesame Street</p>
<p>Brooklyn, NY</p>
<p>Contact Us: 0123 456 7890</p>
电话号码后面并不总是有<。
【问题讨论】:
-
试试
'~\d{11,}(*SKIP)(?!)|[(]*\d{3}[)]*\s*[.\-\s]*\d{3}[.\-\s]*\d{4}~'。但是,这仍然需要调整。请发布确切的要求。 -
@WiktorStribiżew - 添加上下文以帮助改进答案
-
能否提供源代码的sn-p?
-
@CameronRoe 添加了一些代码以获得更多视角
-
@RyanCastle:事实上,这项任务非常艰巨。我建议尝试一系列正则表达式,看看它们是否有帮助。 1) 从单词边界开始并调整限制量词阈值 -
[(]*\b\d{3,4}[)]*[.\s-]*\d{3}[.\s-]*\d{4}\b。 2)如果有“序列号”,请尝试通过环视来避免它们 -[(]*\b(?<!\d-)\d{3,4}[)]*[.\s-]*\d{3}[.\s-]*\d{4}\b(?!-\d)。可能会出现其他极端情况,但只有你有数据,我们无法提供好的有效答案。