为什么正则表达式r'[a |(an)|(the)] +'分别检测'h'和'he'而不是'the'作为一个整体?

Moh*_*ani 0 python regex nltk

我试图在给定的文本中找到'a','an','the'.并且表达式r'[a |(an)|(the)] +'仅识别'a'而不识别'an'和'the'.

nltk.re_show(r'[a|(an)|(the)]+', 'sdfkisdfjstdskfhdsklfjkhe an skfjkla')
Run Code Online (Sandbox Code Playgroud)

这给了我输出

sdfkisdfjs{t}dskf{h}dsklfjk{h}{e} {a}{n} skfjkl{a}
Run Code Online (Sandbox Code Playgroud)

我也试过了

nltk.re_show(r'[a|<an>|<the>]+', 'sdfkisdfjstdskfhdsklfjkhe an skfjkla')
Run Code Online (Sandbox Code Playgroud)

我得到一个输出

sdfkisdfjs{t}dskf{h}dsklfjk{he} {an} skfjkl{a}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么'h'和'他'被认可.

在这种情况下,正确的正则表达式可以识别给定文本中的"a","an"和"the"?

Den*_*ret 7

方形和圆形支架的含义不同.方括号用于指定"内部任何一个字符".

另请注意,如果要匹配"an",则不希望捕获停止在"a",这意味着您必须反转顺序.

你想要什么而不是

[a|(an)|(the)]+
Run Code Online (Sandbox Code Playgroud)

似乎是

(an|a|the)+
Run Code Online (Sandbox Code Playgroud)

或者只是

(an|a|the)
Run Code Online (Sandbox Code Playgroud)

或(不太可读)

(an?|the)
Run Code Online (Sandbox Code Playgroud)

(是的,一个问题通常有很多正则表达式)