簡體   English   中英

使用Java / regex提取數據表單字符串

[英]Extracting Data form String using Java/regex

我試圖從此字符串中提取數據:

你好。 Blah blahblah blah Building 016814-Door 01002 BlahBLAHblah DUHHH 78787 blah,Blah blah Building Dr 4647 8989 BLAHBlah blahBlah

我想遍歷字符串並提取建築物和門號的每個實例,並將其輸出到控制台。 但是,由於建築物和門號的兩個實例互不相同,因此我知道我需要使用兩種不同的Regex模式。

這是我的代碼:

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 regex模式有關。 似乎介於兩者之間。 我是regex的新手,所以如果您需要更多有關此信息,請告訴我。 任何幫助都感激不盡。

我相信我已經找到了自己問題的答案。 非常感謝您的投入; 非常感激。

我用了:

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

我的輸出是:

建築物016814門01002建築物4647門8989

您的(.+?)部分太寬。 嘗試這個:

"\\b((?:Building|Door|Dr)\\s\\d+)\\b"

然后,僅從組1中捕獲捕獲的內容。如果不需要,請確保關閉區分大小寫的匹配。

我正在猜測您想要的結果。 您實際上可能正在尋找這個:

"\\b(Building\\s\\d+)\\s(Door\\s\\d+)\\b"

編輯:根據您的意見,我能想到的最簡單的方法是:

"\\bBuilding\\s(?:(\\d+)\\sDoor\\s(\\d+)|Dr\\s(\\d+)\\s(\\d+))\\b"

為了清楚起見,刪除了雙斜杠:

/\bBuilding\s(?:(\d+)\sDoor\s(\d+)|Dr\s(\d+)\s(\d+))\b/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM