java - 使用 Java/regex 从字符串中提取数据

标签 java regex

我正在尝试从此字符串中提取数据:

Hello there. Blah blahblah blah Building 016814 - Door 01002 BlahBLAHblah DUHHH 78787 blah, Blah blah Building Dr 4647 8989 BLAHBlah blah blahBlah

我希望循环遍历字符串并拉取建筑物和门号的每个实例并将其输出到控制台。但是,由于建筑物和门号的两个实例彼此不同,我知道我将需要使用两种不同的正则表达式模式。

这是我的代码:

public static void main(String agrs[]) {
    String myStr = "Hello there. Blah blahblah blah Building 016814 - Door 01002"+
           " BlahBLAHblah DUHHH 78787 blah, Blah blah Building Dr 4647 8989 BLAHBlah blah blahBlah";

    Pattern p = Pattern.compile("Building.+?(?:[Dd]).+?(\\d+).+?(\\d+)");
    Pattern p1 = Pattern.compile("Building.+?(\\d+).+?(?:[Dd]).+?(\\d+)");

    Matcher m = p.matcher(myStr);
    Matcher m1 = p1.matcher(myStr);

    while(m1.find() && m.find()) {
         System.out.print(" Building " + m1.group(1) + " " + "Door ");
         System.out.print(m1.group(2));
         System.out.print(" Building " + m.group(1)+" "+ "Door "+m.group(2));
    }

这是我的输出:

Building 016814 Door 01002 Building 01002 Door 78787

我知道这与我的 p 正则表达式模式有关。它似乎在两者之间拉扯任何数字。我是正则表达式的新手,所以如果您需要更多相关信息,请告诉我。任何帮助将不胜感激。

最佳答案

我相信我已经找到了自己问题的答案。非常感谢大家的意见;非常感激。

我用过:

Building[ ][Dd].+?(\\d+).+?(\\d+)

我的输出是:

Building 016814 Door 01002 Building 4647 Door 8989

关于java - 使用 Java/regex 从字符串中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5315042/

相关文章:

java - 当用户输入错误时循环,当输入正确时递增

java - PLS-00103 : Encountered the symbol "TEST_PKG" when expecting one of the following: ;

java - 定义由 canvas2image 生成的图像的属性,例如替代标签

mysql - 如何在 MySQL 替换命令中使用正则表达式?

java - java中两边带通配符的双向字符串匹配

java - 将某个数字移动到数组的前面(Java)

Java部署服务器程序

Python提取关键字和括号后的文本

regex - 在文件和输出文件名中搜索具有特定文本的行(文件命令和 grep)

regex - 花式正则表达式未在输入中返回所有匹配项