<p>由于在示例中使用的是set,结果的顺序似乎并不重要。
你可以用两种方法轻松做到这一点。一个有正则表达式,另一个没有正则表达式(如果不需要,为什么还要用正则表达式呢)。在</p>
<p>对于regex,您只需要一个简单的regex <code>[^a-z]</code>。使用<code>filter</code>可以执行以下操作:</p>
<pre><code># drop the IGNORECASE option if you only want lowercase
pat = re.compile(r'[^a-z]', re.IGNORECASE)
# using the function pat.search as your filter function
results = set(filter(pat.search, inputs))
</code></pre>
<p>如果适合您的情况,<code>str</code>类上有一个名为<code>isalpha</code>的函数,如果字符串只有字母字符,则返回true。可以使用以下代码构建集合:</p>
^{pr2}$
<p>如果包含来自<code>itertools</code>的<code>filterfalse</code>函数(<code>filter</code>的对应点),则可以执行以下操作:</p>
<pre><code>from itertools import filterfalse
results = set(filterfalse(str.isalpha, inputs))
</code></pre>
<p>您可以考虑编写自己的函数来与<code>filter</code>一起使用。这里有一个函数也不包括冒号或空格:</p>
<pre><code>def has_valid_characters(word):
return not (word.isalpha() or
' ' in word or
':' in word)
# ...
results = set(filter(has_valid_characters, input))
</code></pre>
<p>如果您希望排除其他一些字符,可以使用regex或使用<code>any</code>函数作为过滤器函数的一部分:</p>
<pre><code>def has_valid_characters_no_regex(word):
return not (word.isalpha() or
any(x in word for x in ' :#-'))
pat2 = re.compile('[- :#]')
def has_valid_characters_regex(word):
return not (word.isalpha() or
pat2.search(word))
</code></pre>