正则表达式用字符串的一部分忽略单词

时间:2018-05-18 14:04:30

标签: regex python-3.x

我有一个文字:

'1 2 3 ab AB úá awindow BCwindow'

目前我只使用这个正则表达式:[a-zA-Zá-ú]+,这就是结果:

['ab', 'awindow', 'bcwindow', 'úá']

我想删除'window'字符串字词来获取此字段:

['ab','a','bc','úá']

感谢。

1 个答案:

答案 0 :(得分:1)

如果单词 window 总是出现在匹配单词的末尾,您可以这样做:

(?<!\S)[a-zA-Zá-ú]+?(?:(?!\S)|(?=window))

这可以确保您在单词之前没有额外的非空格字符(防止匹配从较长字符串的中间开始)或跟随它。您可以改为使用单词边界\b

\b[a-zA-Zá-ú]+?(?:\b|(?=window))

Live demo

故障:

  • \b匹配单词边界位置(单词开头的位置)
  • [a-zA-Zá-ú]+?至少有一次与班级中的角色匹配,不合时宜
  • (?:开始非捕获组
    • \b匹配单词边界(此处我们指的是单词结尾)
    • |
    • (?=window)一个积极的前瞻,断言后面的字符是window
  • )非捕获组结束

每当第二个字边界匹配或正向前导断言时,引擎就会满足,并且到那一点的每个东西都会作为匹配返回。