这是我的代码的一部分:
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"
单词的模式,但我始终无法使用我的正则表达式。我总是得到""
一个空字符串。如何实现我的目标?
答案 0 :(得分:2)
正则表达式中的?
表示其前面的组或字符可以选择性地出现。在您的原因中,这意味着adam
可能会发生,hecktman
可能会发生。所以他们都被允许存在但也缺乏,因此空字符串满足这个正则表达式。
您希望其中一个单词实际存在,因此请使用|
运算符。这意味着双方中的一方应该存在(假设在子表达式之后没有?
)。在您的情况下,(adam)|(hecktman)
表示正则表达式将匹配包含adam
或hecktman
的行。
答案 1 :(得分:1)
您可以使用以下正则表达式:
((adam)( hecktman)?)|(hecktman)