如何删除一行中除匹配正则表达式模式之外的所有内容?

问题描述 投票:0回答:2

我使用

^.*?(\d{3}\D?\d{3}\D?\d{4}).*$
并替换为
\1
$1
这样,除了电话号码之外,每行中的所有内容都将被删除。示例链接https://regex101.com/r/jK6eD8/3.

基本上它的工作原理如下:

第 1 行:这是垃圾文本,仅保留 818-333-2323

第2行:仅保留以下号码4445553333。

我需要帮助的是找到以下电话格式的匹配正则表达式模式,并删除其各自行中的所有其他内容,除了匹配的电话号码(如上面的链接)。格式如下。

07123452670
07812 345 931
07412 123466
00447912345188
+971557017442
+971 557 856 832
0414 934 993

所以基本上,我需要一个正则表达式来匹配 11 位数字。 (07123456270)

匹配5位数字,后跟空格,后跟3位数字,后跟空格,后跟3位数字。 (07812 345 931)

匹配5位数字,后跟空格,后跟6位数字(07412 123466)

匹配14位数字(12345678901234)

匹配+号后跟12位数字(+971557017442)

匹配 + 后跟 3 位数字、空格,后跟 3 位数字、空格、另外 3 位数字 (+971 557 856 832)

最后一位、4 位数字、空格、3 位数字、空格、3 位数字。 (0414 934 993)

regex pattern-matching
2个回答
1
投票

此正则表达式满足要求:

^.*?(\+?(?:\d{11,14})|(?:\d{5}\s(?:\d{3}\s\d{3}|\d{6}))|(?:\d{3}(?:\s\d{3}){3})|(?:\d{4}\s\d{3}\s\d{3})).*$

正如您在这里看到的:https://regex101.com/r/lY3jW0/1

希望对你有帮助


0
投票

如果您正在分析的文本不包含其他“长”数字,您可以只获取数字字符串,数字字符串之间带有可选的空格、句号和破折号。它可能看起来像这样:

^.*?(\d[\d .-]{9,13}\d).*$

比赛组必须包括

  1. 一个数字,后面跟着
  2. 9-13 个字符,可以是数字、空格、破折号或句号。然后接着是
  3. 最后一位数字。

这对数字的组成并不那么严格,所以它可能不适合您的需求。但话又说回来,它可能;)

问候

© www.soinside.com 2019 - 2024. All rights reserved.