如何通过模式提取子字符串忽略Python中的特定情况?

时间:2017-10-10 08:58:09

标签: python regex

假设我有一个字符串:

{{1}}

我想通过模式{{1}}提取所有条目,仅在正确的正则表达式模式的帮助下忽略单词{{1}}(没有任何预处理)。我该怎么做?

我试过这个:

{{1}}

但它只发现了第一个条目......哪种模式是正确的?

2 个答案:

答案 0 :(得分:1)

要使用rty字以外的小写ASCII字母提取所有整个单词,请使用

r'\b(?!rty\b)[a-z]+'

请参阅regex demo

<强>详情

  • \b - 字边界
  • (?!rty\b) - 如果在当前位置的右侧紧跟着rty子字符串,后跟一个尾随字边界(如果可以有任何字符但是小写字母),则会导致匹配失败的负向前瞻ASCII字母,您可以将此\b替换为(?![a-z])
  • [a-z]+ - 一个或多个小写ASCII字母。

以下是Python demo

import re
rx = r"\b(?!rty\b)[a-z]+"
s = "qwe rty uio"
print(re.findall(rx, s))
# => ['qwe', 'uio']

答案 1 :(得分:0)

对于这种特殊情况,你甚至不需要前瞻。只是拆分空格并使用列表理解:

import re

s = 'qwe rty uio'
words = [word for word in re.split(r'\s+', s) if word != 'rty']
print(words)
# ['qwe', 'uio']

请参阅a demo on ideone.com