Skip to main content
 首页 » 编程设计

python之设计一个 RE 来过滤单词

2025年05月04日21emanlee

我使用了以下 RE 来过滤文本:

 reg_ex=re.compile(r"\breal[?]*|\breally\s*[?]+", re.IGNORECASE) 

和以下功能:

def is_present(text): 
    if reg_ex.search(text): 
        return True 
    else: 
        return False 

该函数输出以下单词为真:

1)real  
2)realization 
3)this is not really true. 
4)this is not real. 
5)is this real? 
6)really?????? 
7)really??!!! 
8)really 

但我不想让 RE 过滤这个词: 2)实现
确实如此

我应该如何更改我的 RE?

请您参考如下方法:

在提出解决方案之前,您必须分析自己的正则表达式。 \breal[?]*|\breally\s*[?]+ 包含 2 个备选方案,\breal[?]* 和 \breally\s*[ ?]+。 \breal[?]* 匹配一个单词边界(可能有一个非单词字符,或者当前位置之前的字符串的开头),然后是一个子字符串 real,然后是 0 个或多个 ? 符号。 \breally\s*[?]+ 匹配单词边界,really,0 个或更多空格和 1 或更多 ? symbols.It means, realization 会匹配,因为第一个选择完美匹配它(单词边界,real,后面有0个问号,第二个选择不是甚至尝试过)。

解决方案多种多样,但这里有一些提示:

1)(最符合原逻辑的)在real之后添加一个negative lookahead (?!ization): \breal(?!ization)[?]*|\breally\s*[?]+

2) (遵循逻辑......)你似乎允许任何以 real 开头的单词,使用 \breal(?!ization)

3) 如果你只是匹配 real 或 really 作为整个单词,你可以使用 \breal(?:ly)?\b .