好这是我的示例文本......一切都是
THEPONDIS15AWAYLOOKATTHOSEBASS5POUNDERSWELLLITATNIGHTALLAROUNDQUIETSEMICOUNTRYAREASTILLMOREBUT的的CallMe NORENTALNOLEASEANDPLEASEWENEEDNOREALTORSASMYWIFEDOES的 3176665440 ANDCANNOTKEEPALLTHEMAINTANCEOFABIGHOUSEWANNAGOSOUTHTHANKSCALLMETHANKS
正如您所看到的那样,呼叫和电话号码在60个左右的范围内相互之间。所以我一直试图找到一个表达式找到这个,确定CALL在60个字符左右,然后拉出电话号码,如果它...
我知道我需要像...这样的东西。
Pattern p11 = Pattern.compile("[0-9]{11}");
Pattern p10 = Pattern.compile("[0-9]{10}");
Pattern p7 = Pattern.compile("[0-9]{7}");
为了确定它是否可能是实际的电话号码,因为它可能 13173333333 或只是 3173333333 或只是 3333333
剩下的呢?我知道我可能不得不做一种子串或类似的东西,但它给了我更多的困难然后我认为它会。
我试过这样做......
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&#39;离开 - 看看那些低音 - 5 Pounders--周围晚上光线充足 - 安静的半乡村地区......还有更多但是我没有租赁 - 没有租赁和请 - 我们不需要房地产经纪人就像我的妻子那样317 6 6.6-54.4 0并且不能保留一个大房子的所有维护 - 想去南方谢谢给我打电话!打电话给我谢谢!
正如您从原始文本中看到的那样,删除空格和所有特殊字符才有意义,然后只需进行简单的表达式比较即可找到电话号码,然后查找单词&#34; call&#34 ;在60个字符之内。显然,这不是唯一的段落还有数百个。
答案 0 :(得分:0)
我说实话,这似乎是你以极其困难的方式做到这一点。不过,这里有一个关于你如何去做的想法。
首先得到你要检查的数字范围让我们说它是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");
希望这至少可以让你走上正确的道路。
答案 1 :(得分:0)
我会使用https://github.com/googlei18n/libphonenumber而非正则表达式来查找电话号码。该库可以按预期工作
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
});