我需要在数千个文件中查找可能已经硬编码到某些代码中的800个数字。我是正则表达式的新手,但我认为在这种情况下它们可能很有用。我能在网上找到这个:
^(\+?1)?(8(00|44|55|66|77|88)[2-9]\d{6})$
不幸的是,我不认为这会考虑不同的格式,例如:
1(800) 765-4321
1 877 765-4321
1-855-765-4321
1.800.765.4321
我不知道电话号码有多么多样,但我认为应该有一个全能的方式来写这个。
答案 0 :(得分:2)
编辑:更新的答案(见评论)
这个怎么样:
(\d\D{0,2}8\d{2}\D{0,2}\d{3}\D{0,2}\d{4})
匹配
1 (800) 765 4321
1 877 765-4321
1-855-765-4321
1.800.765.4321
1 (800) 123-4567
18007654321
与aliteralmind非常相似,但有点短。 {}
允许您这样说:
z{x} #you want exactly x matches of z
z{x,y} #you want between x and y matches of z
所以:
a{3,6} #you want between 3 and 6 repeats of a
答案 1 :(得分:1)
这匹配您的所有演示数据,并且仅匹配数字,例如18001234321
\+?1?\D*\d\d\d\D*\d\d\d\D*\d\d\d\d\b
您还可以在本页底部看到其技术说明:http://regex101.com/r/lE2fR2
基本上,它的零或多个非数字(\D
)后跟一些数字(\d
)。
对于800个号码,只需将第一个\d
更改为8
。
如果您的目标是删除除数字之外的所有内容,则捕获数字并替换为捕获组:
Find what: \+?(1?)\D*(\d\d\d)\D*(\d\d\d)\D*(\d\d\d\d)\b
Replace with: $1$2$3$4
爪哇:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
/**
<P>{@code java StripPhoneFormattingXmpl}</P>
**/
public class StripPhoneFormattingXmpl {
public static final void main(String[] igno_red) {
String sToSearch = "1(800) 765-4321 1 877 765-4321 1-855-765-4321 1.800.765.4321 18001231234";
String sRegex = "\\+?(1?)\\D*(\\d\\d\\d)\\D*(\\d\\d\\d)\\D*(\\d\\d\\d\\d)\\b";
String sRplcWith = "$1$2$3$4";
Matcher m = Pattern.compile(sRegex).matcher(sToSearch);
StringBuffer sb = new StringBuffer();
while(m.find()) {
m.appendReplacement(sb, sRplcWith);
}
m.appendTail(sb);
System.out.println("Original: " + sToSearch);
System.out.println("Stripped: " + sb);
}
}
输出:
[C:\java_code\]java StripPhoneFormattingXmpl
Original: 1(800) 765-4321 1 877 765-4321 1-855-765-4321 1.800.765.4321 18001231234
Stripped: 18007654321 18777654321 18557654321 18007654321 18001231234
答案 2 :(得分:1)
我根据你自己的正则表达式使用:
(?:^|\D)(?:\+?1)?\D*8([04-8])\1\D*[2-9]\d\d\D*\d{4}\b
答案 3 :(得分:1)
这是一个有点复杂的正则表达式,它会过滤掉无效的模式,但仍保留你列出的模式。
例如,它不接受以下数字:
1-801-765-1234
1-800-123-4567
1ABCDEFGHIJK8007654321
+1 877765-4321
1.800-765.4321
(+?\b1|\b)((()|([.-])|\s)?8(00|44|55|66|77|88)(?(3))|)(?(4)\4|(?(2)\s|))[2-9]\d{2}(?(4)\4|(?(2)[.-]|))\d{4}\b
它将确保以下内容:
请参阅Debuggex以获得评论版本,该版本分解了每个部分的功能。