我需要一些文本来生成按空格分割的标记。
此外,我需要删除所有标点符号,因为我需要删除双括号[[]中的所有内容(包括双括号)。
每个令牌我都将放入字典作为具有值列表的键。
我已经尝试过使用正则表达式删除这些双花括号模式(if-elses ...),但是找不到有效的解决方案。目前,我有:
tokenDic = dict()
splittedWords = re.findall(r'\[\[\s*([^][]*?)]]', docs[doc], re.IGNORECASE)
tokenStr = splittedWords.split()
for token in tokenStr:
tokenDic[token].append(value);
我将不胜感激:)
谢谢
答案 0 :(得分:2)
这是您要找的吗?
import re
value_list = []
inp_str = 'blahblah[[blahblah]]thi ng1[[junk]]hmm'
tokenDic = dict()
#remove everything in double brackets
bracket_stuff_removed = re.sub(r'\[\[[^]]*\]\]', '', inp_str)
#function to keep only letters and digits
clean_func = lambda x: 97 <= ord(x.lower()) <= 122 or 48 <= ord(x) <= 57
for token in bracket_stuff_removed.split(' '):
cleaned_token = ''.join(filter(clean_func, token))
tokenDic[cleaned_token] = list(value_list)
print(tokenDic)
输出:
{'blahblahthi': [], 'ng1hmm': []}
关于追加到列表中,我现在没有足够的信息来告诉您您所处情况的最佳方法。
如果要在添加键时设置值,请执行以下操作:
tokenDic[cleaned_token] = [val1, val2, val3]
如果要在添加密钥后设置值,请执行以下操作:
val_to_add = "something"
if tokenDic.get(cleaned_token, -1) == -1:
print('ERROR', cleaned_token, 'does not exist in dict')
else:
tokenDic[cleaned_token].append(val_to_add)
如果在两种情况下都希望直接附加到字典,则需要使用defaultdict(list)而不是dict.。然后,如果字典中不存在键,它将创建该键,并赋值一个空列表,然后添加您的值。
答案 1 :(得分:1)
要删除[[]]中的所有内容,您可以使用re.sub,并且您已经具有正确的正则表达式,因此只需执行此操作。
x = [[hello]]w&o%r*ld^$
y = re.sub("\[\[\s*([^][]*?)]]","",x)
z = re.sub("[^a-zA-Z\s]","",y)
print(z)
这将打印“世界”