正则表达式用双引号中的文本,除非以特定单词结尾

时间:2012-10-23 23:30:34

标签: python regex

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

例如下面,我希望解析引文中不以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抓住了这些词。

任何帮助都会得到解决。

2 个答案:

答案 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. 步骤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