Regex 如何让我的正则表达式达到我的目标?

Regex 如何让我的正则表达式达到我的目标?,regex,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

这是我代码的一部分:

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());
}
String子数组[]=sub.split(“”);
StringBuilder patternbuilder=新StringBuilder();
对于(int i=0;i
这是我的正则表达式:
(adam)?(hecktman)?

以下是示例文档:

在微软之前,亚当曾在安达信咨询公司担任顾问三年。在安达信咨询公司期间,亚当与客户合作,包括金融服务、政府和公用事业领域的客户。亚当获得了伊利诺伊大学(Unina)香槟分校的商业和商业管理专业((NM:理学士))。他还拥有工商管理硕士学位


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

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


您希望两个单词中的一个实际出现,因此请使用
|
运算符。这意味着双方中的一方都应该存在(假定子表达式后面没有
)。在您的情况下,
(adam)|(hecktman)
意味着正则表达式将匹配包含
adam
hecktman
的行。您可以使用以下正则表达式:

((adam)( hecktman)?)|(hecktman)
试试
(亚当)|(赫克特曼)
。您的允许由于“?”而丢失它们。