<p>如果您不想使用正则表达式,也不想依赖于大写,那么可以使用另一种方法</p>
<pre><code>def pokeFinder(strng):
wordList = strng.split()
pokeList = []
for word in wordList:
if not set('[~!@#$%^&*()_+{}":;\']+$').intersection(word) and 'for' not in word:
pokeList.append(word.replace(',', ''))
return pokeList
</code></pre>
<p>这不会添加带有特殊字符的单词。它也不会添加<code>for</code>的单词。然后从找到的单词中删除逗号</p>
<p><code>str2</code>的打印返回<code>['Diglett', 'Dugtrio']</code></p>
<hr/>
<p><strong>编辑</strong>
鉴于有两个单词和特殊字符的口袋妖怪,我制作了上面代码的这个稍微复杂的版本</p>
<pre><code>def pokeFinder(strng):
wordList = strng.split()
pokeList = []
prevWasWord = False
for word in wordList:
if not set('%&').intersection(word) and 'for' not in word:
clnWord = word.replace(',', '')
if prevWasWord is True: # 2 poke in a row means same poke
pokeList[-1] = pokeList[-1] + ' ' + clnWord
else:
pokeList.append(clnWord)
prevWasWord = True
else:
prevWasWord = False
return pokeList
</code></pre>
<p>如果没有“三个字”的口袋妖怪,并且规则操作集保持不变,那么这应该总是有效的。连续两次戳匹配将添加到上一个口袋妖怪</p>
<p>所以打印一串<code>'30% for Mr. Mime & 20% for Type: Null'</code>会得到
<code>['Mr. Mime', 'Type: Null']</code></p>