如何让我的正则表达式实现我的目标?

时间:2015-05-10 14:34:21

标签: regex

这是我的代码的一部分:

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 )?

这是示例文档:

  在微软之前,亚当是安德森咨询顾问三年。在安徒生咨询公司,亚当与客户合作,包括金融服务,政府和公用事业。 adam从伊利诺伊大学的urbana-champaign获得了(nam:科学学士学位)商业和工商管理。他还拥有工商管理硕士学位。

我想要提取其中必须至少有一个"adam hecktman"单词的模式,但我始终无法使用我的正则表达式。我总是得到""一个空字符串。如何实现我的目标?

2 个答案:

答案 0 :(得分:2)

正则表达式中的?表示其前面的组或字符可以选择性地出现。在您的原因中,这意味着adam可能会发生,hecktman可能会发生。所以他们都被允许存在但也缺乏,因此空字符串满足这个正则表达式。

您希望其中一个单词实际存在,因此请使用|运算符。这意味着双方中的一方应该存在(假设在子表达式之后没有?)。在您的情况下,(adam)|(hecktman)表示正则表达式将匹配包含adamhecktman的行。

答案 1 :(得分:1)

您可以使用以下正则表达式:

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