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

2024-05-17 07:16:55 发布

您现在位置:Python中文网/ 问答频道 /正文

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

例如下面,我希望对引用中所有不以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的词。你知道吗

任何帮助都会得到安抚。你知道吗


Tags: 文件文本结尾dglgveriqrverizon
2条回答
  1. 第一步。添加逗号。你知道吗

    with_commas = "],".join(text.split("]"))
    
  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
    

这是因为VER.+?中被捕获(?使.+不贪婪,但在这种情况下,....VER被捕获的唯一方法是让它在.+?中)。与其说“match stuff not following by'VER'”,不如说“match a word where the last 3 characters not VER”(匹配最后3个字符不是VER的单词)(即结尾引号not前面有'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结尾,而是双引号?)你知道吗

相关问题 更多 >