2015-05-10 36 views
1

這是我的代碼部分:如何讓我的正則表達式實現我的目標?

String subArray[]=sub.split(" "); 
StringBuilder patternbuilder=new StringBuilder(); 
for (int i = 0; i < subArray.length; i++) { 
    patternbuilder.append("("+subArray[i]+")"+"?"); 
} 
String subpattern=patternbuilder.toString(); 
Pattern pattern=Pattern.compile(subpattern); 
Matcher matcher = pattern.matcher(para); 
while (matcher.find()) { 
    NamedEntity subEntity=new NamedEntity(jCas, matcher.start(), matcher.end()); 
    subEntity.setValue(matcher.group()); 
} 

這是我的正則表達式:(adam)?(hecktman)?

這是示例文件:

在微軟之前,亞當與安達信諮詢公司顧問三年。在andersen諮詢公司工作期間,adam與包括金融服務,政府和公用事業公司在內的客戶合作。亞當在伊利諾伊大學獲得了((nam:理學學士學位))商業和工商管理學位。他還擁有工商管理碩士學位。

我想提取模式,其中必須至少有一個詞"adam hecktman",但我總是不能用我的正則表達式。我總是得到""一個空字符串。如何實現我的目標?

+0

嘗試'(ADAM)|(hecktman)'。你們允許他們兩個都因爲'?'而失蹤。 – ShellFish

回答

2

正則表達式中的?表示前面的組或字符可以選擇性地出現。在您的原因這意味着adam可能會發生並hecktman可能會發生。所以他們都被允許存在,但也缺乏,因此空字符串滿足這個正則表達式。

您希望兩個單詞中的一個實際存在,因此請使用|運算符。這意味着雙方中應有一方存在(假設子表達式後面沒有?)。在你的情況(adam)|(hecktman)意味着正則表達式將匹配包含adamhecktman的行。

1

您可以使用以下正則表達式:

((adam)(hecktman)?)|(hecktman)