如何在re中有两种模式

时间:2017-07-10 21:19:28

标签: python regex

假设有一个单词列表,并希望通过每个单词来查看它是否与模式匹配" 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

编辑:抱歉,我的问题/代码与

不匹配

2 个答案:

答案 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代替findallmatch将匹配整个字符串,而findall将查找与正则表达式匹配的子字符串。

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