2017-07-31 33 views
0

我需要一個正則表達式,可以讓我的單詞在另一個單詞之後。 例如:簡單的正則表達式在java中接連不斷的單詞

street address Maria and another st. lohberg and give me another av. darrwerg and another st example 

所需的輸出將是:

maria,lohberg,darrwerd,example 

Maybye是否有可能解決這一狀況正則表達式:address: herman poortstrat this is text but not address給我:herman poortstrat但它比更復雜的我意見。 我有以下的正則表達式:(?<=\bstreet\s)(\w+)但它給了我只有街道後用空白的地址。 我的正則表達式在「街道」之後給了我文字,所以它可能是解決方案之一,但我需要更多的詞,如:"av.","av","av ","address"和其他組合。 通常我只想從文本中獲得只有街道名稱而沒有別的。不是街道和它的號碼只有街道。我在正則表達式方面還不夠好,所以我在尋求你的幫助。

+1

鑑於你目前的描述來看,沒有辦法區分兩條街道(如「聖瑪麗亞」)和一條街道,然後是另一條街道ord(像'darrwerg和') –

+0

我想同樣,所以我只想得到像darrwerg一樣的單詞,或者如果我有地址聖誕老人瑪麗亞我想要聖誕老人,因爲我知道得到聖誕老人瑪麗亞是不可能的。 – JavaCoder

+1

使用['\ b(?:street \ s + address |(?:av | st)\。?)\ S +(\ W +)'](https://regex101.com/r/c7MQ2e/2)。請參閱http://ideone.com/mrqkEN。 –

回答

2

這會給你之後的地址,st。av。 你需要

public static void main(String[] args) { 
    String str = "street address Santa Maria and another st. lohberg and give me another av. darrwerg and another st street"; 
    Pattern p = Pattern.compile("((address|st\\.|av\\.)\\s)(\\w+?\\s)"); 
    Matcher m = p.matcher(str); 
    List<String> streets = new ArrayList<String>(); 
    while (m.find()) { 
     streets.add(m.group(3)); 
    } 
    System.out.println(streets); 
} 
+0

它的工作幾乎完美,但在一種情況更糟,如果我有:'st.lohberg'這個正則表達式避免lohberg – JavaCoder

+1

然後通過在末尾添加'?'使空間'\\ s'可選。所以最終的正則表達式將會是'((address | st \\。| av \\。)\\ s?)(\\ w +?\\ s)「' – isah

1

你可以調整它,你需要使用

\b(?:street\s+address|(?:av|st)\b\.?)\s*(\w+) 

regex demo

詳細

  • \b - 字邊界
  • (?:street\s+address|(?:av|st)\b\.?) - 非捕獲組匹配
    • street\s+address - street,1+空格,address
    • | - 或
    • (?:av|st)\b\.? - avst整個單詞隨後與任選的點
  • \s* - 0以上空格
  • (\w+) - 第1組:一個或多個單詞字符

Java demo

String s = "street address Maria and another st. lohberg and give me another av. darrwerg and another st example"; 
Pattern p = Pattern.compile("\\b(?:street\\s+address|(?:av|st)\\b\\.?)\\s*(\\w+)", Pattern.CASE_INSENSITIVE); 
Matcher m = p.matcher(s); 
while (m.find()){ 
    System.out.println("Value: " + m.group(1)); 
} 

結果:

Value: Maria 
Value: lohberg 
Value: darrwerg 
Value: example 
+0

我不知道爲什麼,但在這個網站[鏈接](https://regex101.com/r/vY9eY5/14)它不能正常工作 – JavaCoder

+0

@Alcwak你沒有啓用'g'和'i'標誌 - [從我的答案中看到這個演示](https: //regex101.com/r/c7MQ2e/3)。 –

+0

謝謝,另一個我在我的程序中找到的時候:'街道地址Maria和另一個st。 lohberg,並給我另一個AV。 darrwerg另有ST例子街道exstreet這是end' otuput是:'值:瑪麗亞 值:的Lohberg 值:darrwerg 值:例如 值:REET '最後的 「REET」 是錯誤的,應該exstreet – JavaCoder