假设有一个单词列表,并希望通过每个单词来查看它是否与模式匹配" a?e",在哪里?可以是任何字母数字字符。另外,我想忽略包含' - ' (短划线)。我如何使用正则表达式执行此操作?
这是我目前所拥有的:
for word in words:
found = re.findall(r'([a]\w{1}[e])(^((?!(-)).)*$)', word)
if found:
print(word)
例如:['蛇','采取','想要','理智'' 1' ;,' snakke',' s-ake']
我想过滤掉:snake, take, sane
编辑:抱歉,我的问题/代码与
不匹配答案 0 :(得分:2)
您可以使用
r'(?i)\b(?<!-)\w*a[a-z]e\w*\b(?!-)'
请参阅the regex demo。
<强>详情
(?i)
- 与re.I
相同,忽略大小写\b
- 字边界(?<!-)
- 在允许单词边界之前没有连字符\w*
- 零个或多个单词字符(如果您只想匹配字母,请替换为[^\W\d_]*
)a
- a
来信[a-z]
- 任何ASCII字母e
- e
来信\w*
- 0+单词字符(或使用[^\W\d_]*
如上所示)\b
- 字边界(?!-)
- 未跟随-
。答案 1 :(得分:0)
使用match
代替findall
。 match
将匹配整个字符串,而findall
将查找与正则表达式匹配的子字符串。
found = (w for w in words if re.match(r'g\wo', word))