You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python正则表达式匹配仅含指定字符且必须包含f的单词?

解决方法

要筛选符合要求的单词,我们需要构建一个同时满足三个核心条件的正则表达式:

  • 仅由[diomarf]中的字符组成
  • 必须包含字母f
  • 排除motiu和diomar这两个特定单词

正确的正则表达式

^(?!(motiu|diomar)$)(?=.*f)[diomarf]+$

各部分含义:

  • ^(?!(motiu|diomar)$):反向预查,确保整个单词不是motiu或diomar
  • (?=.*f):正向预查,确保单词中至少包含一个f
  • [diomarf]+$:限制整个单词仅由指定字符组成,+表示至少有一个字符,$锚定单词结尾

Python 代码示例

import re

word_list = [
    "amfora", "difamador", "difamar", "dimorf", "dofi",
    "fada", "far", "farao", "farda", "fiar", "fiord",
    "fira", "firar", "firma", "for", "motiu", "diomar"
]

pattern = re.compile(r'^(?!(motiu|diomar)$)(?=.*f)[diomarf]+$')
filtered_words = [word for word in word_list if pattern.match(word)]

print(filtered_words)

运行后输出符合要求的单词:

['dimorf', 'dofi', 'fada', 'far', 'farda', 'fiar', 'fiord', 'fira', 'firar', 'firma', 'for']

你之前尝试的表达式问题分析

你之前的表达式没有使用^和$锚定整个单词,导致只匹配了单词的一部分(比如dimorf只匹配到末尾的f),同时缺少预查逻辑来同时满足「包含f」和「仅用指定字符」的双重要求。比如最接近的(?:(((?:f)+)((?:[diomarf])*))),它只会匹配以f开头的部分内容,而不是校验整个单词的合法性。

内容的提问来源于stack exchange,提问作者Eloi Sanchez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 04:45:40