java - 使用正则表达式从字符串中提取带有调用文本的电话号码

标签 java regex

好的,这是我的示例文本...一切都是

THEPONDIS15AWAYLOOKATTHOSEBASS5POUNDERSWELLLITATNIGHTALLAROUNDQUIETSEMICOUNTRYAREASTILLMOREBUTCALLMENORENTALNOLEASEANDPLEASEWENEEDNOREALTORSASMYWIFEDOES3176665440ANDCANNOTKEEPALLTHEMAINTANCEOFABIGHOUSEWANNAGOSOUTHTHANKSCALLMETHANKS

如您所见,调用和电话号码彼此相差不超过 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 英尺 - 看看那些鲈鱼 - 5 磅 - 周围夜间灯火通明 - 安静的半乡村地区...还有更多,但请调用我 - 不出租/不租赁,请 - 我们需要没有房地产经纪人,就像我的妻子那样 317 6 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");

希望这至少能让您走上正确的道路。

关于java - 使用正则表达式从字符串中提取带有调用文本的电话号码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27727912/

相关文章:

javascript - 使用多返回 RegEx ('g' ) + Javascript 中的开关替换字符串

Ruby 正则表达式,有没有办法只匹配文字匹配?

java - 正则表达式匹配最短匹配而不是最长匹配

python - Python 正则表达式问题中的捕获组

ruby 正则表达式提取两部分 : digits, 然后之后的任何内容

JavaFX MediaPlayer 不播放 M4A 文件

java - 配置 tomcat/hibernate 以拥有支持 1.2.840.113549.1.5.13 的加密提供程序

java - 这个多对多关系的 "Owning Side"是怎么确定的呢?

java - 在 Hadoop 分布式缓存中创建和放置文件

java - 从 Android 应用程序进行 NFC 打印