0

所以我试图在文件出现在双引号中时从文件中获取文本,除非引号中的文本以某个后缀结尾。

例如下面,我希望解析引号中不以 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 的单词。

任何帮助将不胜感激。

4

2 回答 2

2

这是因为VER被困在了.+?(这?使得.+非贪婪,但在这种情况下....VER,被抓住的唯一方法是将它放在 中.+?)。不要说“匹配后面没有'VER'的东西”,而是尝试“匹配最后3个字符不是VER的单词”(即结尾引号前面没有'VER')。

此外,不要使用.+try [^"],这将避免您.+在多个单词之间进行匹配。

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 结尾并且用双引号括起来?)

于 2012-10-23T23:49:01.967 回答
1
  1. 步骤 1. 添加逗号。

    with_commas = "],".join(text.split("]"))
    
  2. 步骤 2. 创建字典。

    my_dict = eval("{%(text)s}" % {"text": with_commas})
    
  3. ???

    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)
    
  4. 利润。

    print results
    
于 2012-10-24T00:35:31.767 回答