所以当它出现在双引号中时,我试图从文件中获取文本,除非引号中的文本以某个后缀结尾。
例如下面,我希望解析引文中不以VER结尾的所有内容。
示例输入:
"GameVER": ["GM435615-IQR", "LG-QR435", "HG145-IR9", "WUT828-PQR10"] "VERIZON": ["GKSL42375834-45", "DG-67498", "GF4564", "HFJ-88.8.98"]
输出:
GM435615-IQR
LG-QR435
HG145-IR9WUT828-PQR10
VERIZON
GKSL42375834-45
DG-67498
GF4564
HFJ-88.8.98
在python中,我试过这个:
re.findall(r'(\"\b.+?)(?!VER)\b\"',text)
但它仍然在最后用VER抓住了这些词。
任何帮助都会得到解决。
答案 0 :(得分:2)
这是因为VER
中.+?
被?
捕获(.+
使....VER
非贪婪,但在这种情况下是{{1}的唯一途径被捕获的方法是将它放在.+?
中。不要说“匹配的东西没有跟着'VER'”,而是“匹配最后3个字符不是VER的单词”(即的结尾引用前面的'VER')。
此外,不要使用.+
尝试[^"]
,而是避免您在多个字词之间进行.+
匹配。
re.findall(r'\"(\b[^"]+)(?<!VER)\b\"',text)
示例:
>>> text='"GameVER": ["GM435615-IQR", "LG-QR435", "HG145-IR9", "WUT828-PQR10"] "VERIZON": ["GKSL42375834-45", "DG-67498", "GF4564", "HFJ-88.8.98"]'
>>> re.findall(r'\"(\b[^"]+)(?<!VER)\b\"',text)
['GM435615-IQR', 'LG-QR435', 'HG145-IR9', 'WUT828-PQR10', 'VERIZON', 'GKSL42375834-45', 'DG-67498', 'GF4564', 'HFJ-88.8.98']
(顺便说一句,在上面的输出中你错过了“HG145-IR9”和“WUT828-PQR10”虽然它们没有以VER结尾并且是双引号?)
答案 1 :(得分:1)
步骤1.添加逗号。
with_commas = "],".join(text.split("]"))
步骤2.创建字典。
my_dict = eval("{%(text)s}" % {"text": with_commas})
???
results = [item for sublist in my_dict.values() for item in sublist]
for item in my_dict.keys():
if item[-3:].lower() != "ver":
results.append(item)
利润。
print results