Java 使用Reg exp从字符串中提取带有通话文本的电话号码
好的,这是我的示例文本。。。一切都是 该债券将在芝加哥的5家基金会上出售,在纽约州的所有安静地区仍然很好,但仍需致电男性或女性志愿者3176665440,并且不能保持对大家庭的维护。谢谢 正如你所看到的,电话和电话号码彼此相差不超过60个字符左右。所以我一直在尝试更正一个表达式,以找到这个,确定呼叫在60个字符左右,然后拉电话号码,如果它是 我知道我需要一些像Java 使用Reg exp从字符串中提取带有通话文本的电话号码,java,regex,Java,Regex,好的,这是我的示例文本。。。一切都是 该债券将在芝加哥的5家基金会上出售,在纽约州的所有安静地区仍然很好,但仍需致电男性或女性志愿者3176665440,并且不能保持对大家庭的维护。谢谢 正如你所看到的,电话和电话号码彼此相差不超过60个字符左右。所以我一直在尝试更正一个表达式,以找到这个,确定呼叫在60个字符左右,然后拉电话号码,如果它是 我知道我需要一些像 Pattern p11 = Pattern.compile("[0-9]{11}"); Pattern p10 = Pa
Pattern p11 = Pattern.compile("[0-9]{11}");
Pattern p10 = Pattern.compile("[0-9]{10}");
Pattern p7 = Pattern.compile("[0-9]{7}");
为了确定它是否可能是一个实际的电话号码,因为它可能是13173333或3173333或3333
其余的呢?我知道我可能需要做一些子串之类的事情,但它给我带来了比我想象的要大得多的困难
我试着这么做
String PHONENUMBER = "";
Pattern p11 = Pattern.compile("[0-9]{11}");
Pattern p10 = Pattern.compile("[0-9]{10}");
Pattern p7 = Pattern.compile("[0-9]{7}");
Matcher m11 = p11.matcher(Number);
Matcher m10 = p10.matcher(Number);
Matcher m7 = p7.matcher(Number);
String Call = "CALL";
String Text = "TEXT";
String Message = "MESSAGE";
if (Number.contains(Call)) {
int Numindex = Number.indexOf(Call);
int low = Numindex - 30;
int high = Numindex + 35;
if (low < 0) {
low = 0;
}
if (high > Number.length()) {
high = Number.length();
}
String extract = Number.substring(low, high);
m11 = p11.matcher(extract);
m10 = p10.matcher(extract);
m7 = p7.matcher(extract);
if (m11.find() == true) {
PHONENUMBER = m11.group();
} else if (m10.find() == true) {
PHONENUMBER = m10.group();
} else if (m7.find() == true) {
PHONENUMBER = m7.group();
}
但出于某种原因,这对我来说不起作用
为原始文本请求编辑1
池塘在15英尺外-看看那些鲈鱼-5磅重-四周夜晚光线充足-安静的半乡村地区…更多但请告诉我-不出租/不出租,请-我们不需要房地产经纪人,因为我妻子做317 6.6-54.4 0,无法维持一栋大房子的所有维护-想去南方,谢谢打电话给我!叫我谢谢
正如您从原始文本中看到的,删除空格和所有特殊字符,然后进行简单的表达式比较以查找电话号码,然后查找单词call是否在60个字符以内,才有意义。很明显,这不是仅有的一段,还有数百段。老实说,这似乎是你用一种极其困难的方式完成的。然而,这里有一个关于如何着手做这件事的想法 首先获取要检查的数字范围,假设它是0低-15高 然后编写一个for循环来循环该字符范围。下面的代码是一个示例,说明了如何将其设置为在要检查字符的字符串部分中循环,以查看它是否与电话号码匹配。请记住,这并没有考虑到很快到达字符串末尾,这将导致索引越界异常,也没有考虑到它是否太大,但我会让您解决这些问题
String number = "123HEY1234567890HOWIS";
int realNum = 0; //if this hits exactly 10 then it is a real phone number
int low = 0;
int high = number.length();
for(int i = low; i < high;i++){
//check if the current char is a number
if(number.substring(i, i + 1).matches("[0-9]")){
//if yes then increment
realNum++;
System.out.println(realNum);
//checks if realNum is 10 and makes sure that the next char isn't a number also
if(realNum == 10){
low = i - 9;
high = i;
System.out.println("match");
break;
}
}else{
//if no then reset the checker back to 1
realNum = 0;
}
}
System.out.println("All Done");
希望这至少能让你走上正确的道路。我会使用regex而不是regex来查找电话号码。这个图书馆的工作和你想象的一样
PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
Iterable<PhoneNumberMatch> numbers = phoneUtil.findNumbers(text, Locale.US.getCountry());
List<String> data = new ArrayList<>();
numbers.forEach(number -> {
String s = number.rawString();
// your phone numbers
});
这样的乱码文本应该是可以解析的?并不是说这是不可能的,但为什么你的同伴不发送更多的东西。。。好可解析开头?初始字符串可以在单词/字母之间有许多额外的空格,甚至特殊字符等。。所以为了让它正常工作,我已经假设最简单的方法是删除所有的空格,并将所有内容大写,然后从那里确定它。电话可以写给我,也可以打给我。。等电话号码可能是34344565454等等,你的前提可能是你的失败;请粘贴原始输入。另外,你可能想看看谷歌的libphonenumber。