我有一本字典:
d = {'<word>':1,'-word':12, 'word':1, '$(*#%&^#&@#':2, '!@**$12word*&':4, '::':10, '1230324':1, '+635':5}
我只想删除所有非字母/非数字字符的条目,即,
.
?
!
:
{{ 1}}等等。
我已尝试过以下
;
但他们不会回复我想要的结果,即:
regex = re.compile('[\!\?\.\,\:\;\*\(\)\-\+\<\>]')
regex = re.compile('a-zA-Z0-9_')
regex = re.compile('\\W')
regex = re.compile('[\W_]+') // from [1]
删除条目new_dict = {'<word>':1,'-word':12, 'word':1, '!@**$word*&':4, '1230324':1, '+635':5}
和'$(*#%&^#&@#'
。
另外,我使用此代码删除条目,以防它有用:
::
[1] Stripping everything but alphanumeric chars from a string in Python
答案 0 :(得分:1)
您希望将\ W的整个字符串与^\W+$
匹配。
这样的事情会:
$ cat test.py
import re
pattern = r"^\W+$"
d = {'<word>':1,'-word':12, 'word':1, '$(*#%&^#&@#':2, '!@**$12word*&':4, '::':10, '1230324':1, '+635':5}
for k in d.keys():
matches = re.search(pattern, k)
if (matches):
print 'to remove: ' + k
del d[k]
for k in d.keys():
print k
编辑:问题发生了变化:OP希望一次创建dict。可以这样做:
new_dict = {k:d[k] for k in d.keys() if not(re.search(pattern,k))}