当前位置: 首页 > 知识库问答 >
问题:

模式的正则表达式

郎仰岳
2023-03-14

我是正则表达式的初学者,并尝试搜索特定的数字模式。以下数据以 XML 格式嵌入。

<Tag Name="DUT_1_PC" TagType="Base" DataType="Power" Constant="false" ExternalAccess="Read/Write">
<Data Format="xx">
<![CDATA[[10247,20000,1705,0,16384,16384,[0,0,0,0,0,0,0],[[0,0,0],[1965615,2000,2000],[1952824,50000,0],[0,10000,0],[1928064,500,0
        ],[1928064,10000,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],4,1705,[24779,24760,24760,24760,24780,24740,24760,24780,24760,24800,24740
        ,24740,24740,24780,24740,24740,24800,24780,24760,24760,24740,24780,24760,24760,24740,24740,24780,24760
        ,24740,24740,24779,24779,24760,24819,24780,24740,24759,24780,24760,24740,24720,24780,24780,24760,24760
        ,24740,24779,24780,24740,24760,24820,24780,24740,24780,24760,24780,24780,24760,24781,24719,24779,24800
        ,24780,24780,24760,24760,24799,24780,24780,24780,24739,24780,24780,24740,24779,24741,24780,24780,24760
        ,24740,24740,24720,24740,24780,24740,24720,24760,24800,24740,24760,24760,24800,24740,24780,24760,24740,24760,24740,24740,24740,24780,24760,24780,24739,24761,24760,24800,24780,24740,24719,24739,24760,24760]]]]
    

要求是提取数据(最里面的列表)。在这个例子中,数据从24779开始到24760。注意:每次数据可能不是从“24”开始。因此,我计划通过以下逻辑提取:如果标签名(在本例中:DUT_1_PC)具有非零的有效数据,并且有效数据的计数大于100,用逗号分隔,则提取该列表及其标签名(DUT_1_PC)。

我无法提取所需的数据。

重新。findall(r'\d(?:[\d,.]*\d)')这个正则表达式提取所有不满足我要求的列表数据。

有人能帮我找出正则表达式来提取所需的数据及其标签吗?

共有1个答案

罗梓
2023-03-14

目前还不完全清楚您所说的最里面的列表是什么意思。在您的示例中,[0,0,0] 比您提到的列表嵌套得更深。假设你的意思是最后一个列表,那么 re.findall(r'\[([^]]*)]*]]

然而,正如其他人提到的,使用XML解析器要好得多:

DATA = """
<Outer>
<Tag Name="DUT_1_PC" TagType="Base" DataType="Power" Constant="false" ExternalAccess="Read/Write">
<Data Format="xx">
<![CDATA[[10247,20000,1705,0,16384,16384,[0,0,0,0,0,0,0],[[0,0,0],[1965615,2000,2000],[1952824,50000,0],[0,10000,0],[1928064,500,0
        ],[1928064,10000,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]],4,1705,[24779,24760,24760,24760,24780,24740,24760,24780,24760,24800,24740
        ,24740,24740,24780,24740,24740,24800,24780,24760,24760,24740,24780,24760,24760,24740,24740,24780,24760
        ,24740,24740,24779,24779,24760,24819,24780,24740,24759,24780,24760,24740,24720,24780,24780,24760,24760
        ,24740,24779,24780,24740,24760,24820,24780,24740,24780,24760,24780,24780,24760,24781,24719,24779,24800
        ,24780,24780,24760,24760,24799,24780,24780,24780,24739,24780,24780,24740,24779,24741,24780,24780,24760
        ,24740,24740,24720,24740,24780,24740,24720,24760,24800,24740,24760,24760,24800,24740,24780,24760,24740,24760,24740,24740,24740,24780,24760,24780,24739,24761,24760,24800,24780,24740,24719,24739,24760,24760]]]]>
</Data>
</Tag> 
</Outer>     
"""

import re
import xml.etree.ElementTree as ET

# Find [...] list at end of string
pattern = re.compile(r'\[([^]]*)]+$', re.MULTILINE)
parsed = ET.fromstring(DATA)
for tag in parsed.findall('Tag'):
    if tag.attrib.get('Name') == 'DUT_1_PC':
        print(re.findall(pattern, tag.find('Data').text))

 类似资料:
  • 我需要编写一个具有以下规则的正则表达式: null null 这些示例无效: > 12--11(因为它包含两个连字符) 1-2345(因为它包含5号) <>是字符出现在最后一个位置,那么在字符之前必须有一个数字not hypen。 即11-A(必须不及格)11-1A(必须及格)

  • 问题内容: 我需要这件事的帮助。查看以下正则表达式: 我想查找这样的词:“自制”,“ aaaa-bbb”而不是“ aaa-bbb”,而 不是 “ aaa–aa–aaa”。基本上,我想要以下内容: 单词-连字符-单词。 它适用于所有内容,但该模式会通过:“ aaa–aaa–aaa”,但不应通过。哪种正则表达式适用于此模式? 问题答案: 可以从表达式中删除反斜杠: 下面的代码应该工作 请注意,您可以使

  • 为什么要学正则表达式 实际上爬虫一共就四个主要步骤: 明确目标 (要知道你准备在哪个范围或者网站去搜索) 爬 (将所有的网站的内容全部爬下来) 取 (去掉对我们没用处的数据) 处理数据(按照我们想要的方式存储和使用) 我们在昨天的案例里实际上省略了第3步,也就是”取”的步骤。因为我们down下了的数据是全部的网页,这些数据很庞大并且很混乱,大部分的东西使我们不关心的,因此我们需要将之按我们的需要过

  • 昨天,我需要向正则表达式添加一个文件路径,创建一个如下所示的模式: 一开始正则表达式不匹配,因为包含几个正则表达式特定的符号,如 或 。作为快速修复,我将它们替换为 和 . 与 . 然而,我问自己,是否没有一种更可靠或更好的方法来清除正则表达式特定符号中的字符串。 Python 标准库中是否支持此类功能? 如果没有,您是否知道一个正则表达式来识别所有正则表达式并通过替代品清理它们?

  • 我正在尝试使用python中的正则表达式。我构建了正则表达式,如下所示。我知道用于匹配搜索字符串的开头。我已使用包含多个的匹配模式构建框架,但我不确定将如何尝试匹配搜索字符串中的模式。 我预计会引发错误,关于无效的正则表达式,但它不会引发任何错误,也不会返回任何匹配项。 所以,我的问题是或是有效的正则表达式吗?

  • 有没有人试图描述与正则表达式匹配的正则表达式? 由于重复的关键字,这个主题几乎不可能在网上找到。 它可能在实际应用程序中不可用,因为支持正则表达式的语言通常具有解析它们的方法,我们可以将其用于验证,以及一种在代码中分隔正则表达式的方法,可用于搜索目的。 但是我仍然想知道匹配所有正则表达式的正则表达式是什么样子的。应该可以写一个。