我正在使用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)
这是我对这个问题的正则表达式的第一次尝试,但它并没有真正达到预期的效果.如何编写正则表达式来忽略任何带有非字母数字字符的字符串?
顺便说一句,你的正则表达式似乎与非字母数字字符匹配.但是,建议不要从当前迭代的列表中删除项目,这是导致此错误的原因,因此要克服此错误,请创建一个新列表并将不匹配的元素附加到该列表中.

演示:
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)
据我测试,这几乎适用于所有场景.