正则表达式匹配非字母数字字符

3 python regex

我正在使用Python来解析列表中的一些字符串.有些字符串可能只包含我想忽略的非字母数字字符,如下所示:

list = ['()', 'desk', 'apple', ':desk', '(house', ')', '(:', ')(', '(', ':(', '))']

for item in list:
    if re.search(r'\W+', item):
        list.remove(item)

# Ideal output
list = ['desk', 'apple', ':desk', '(house']

# Actual output
list = ['desk', 'apple', '(:', '(', '))']
Run Code Online (Sandbox Code Playgroud)

这是我对这个问题的正则表达式的第一次尝试,但它并没有真正达到预期的效果.如何编写正则表达式来忽略任何带有非字母数字字符的字符串?

K D*_*awG 6

顺便说一句,你的正则表达式似乎与非字母数字字符匹配.但是,建议不要从当前迭代的列表中删除项目,这是导致此错误的原因,因此要克服此错误,请创建一个新列表并将不匹配的元素附加到该列表中.

在此输入图像描述

演示:

import re

list = ['()', 'desk', 'apple', ':desk', '(house', ')', '(:', ')(', '(', ':(', '))']
new_list = []

for item in list:
    if not re.search(r'^\W+$', item) or re.search(r'^\w+', item) :
        new_list.append(item)

print new_list
Run Code Online (Sandbox Code Playgroud)

生产:

['desk', 'apple', ':desk', '(house']
Run Code Online (Sandbox Code Playgroud)

据我测试,这几乎适用于所有场景.