如何有两种模式

2024-05-16 00:00:15 发布

您现在位置:Python中文网/ 问答频道 /正文

假设a有一个单词列表,并想检查每个单词是否与模式“a”匹配?在哪里?可以是任何字母数字字符。另外,我想忽略包含“-”(破折号)的单词。如何使用regex执行此操作?你知道吗

以下是我目前的情况:

for word in words:
    found = re.findall(r'([a]\w{1}[e])(^((?!(-)).)*$)', word)
    if found:
        print(word)

例如:['snake'、'take'、'want'、'sane'、'1'、'snakke'、's-ake']

我想过滤掉:snake, take, sane

编辑:抱歉,我的问题/代码不匹配


Tags: 列表for字母模式情况数字字符单词
2条回答

使用match而不是findallmatch将匹配整个字符串,而findall将查找与正则表达式匹配的子字符串。你知道吗

found = (w for w in words if re.match(r'g\wo', word))

你可以用

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-单词边界
  • (?!-)-后面不跟-。你知道吗

相关问题 更多 >