代码之家  ›  专栏  ›  技术社区  ›  Nathan123

regex中的组未按预期捕获组

  •  0
  • Nathan123  · 技术社区  · 4 年前

    我有以下字符串

    """<note date="8/31/12">
        <to>Tove</to>
        <from>Jani</from>
        <heading type="Reminder"/>
        <body>Don't forget me this weekend!</body>"""
    

    我想用组捕获打开的标签,以便得到以下输出

    预期产量

    [('note', ' date="8/31/12"'), ('to', ''), ('heading', ' type="Reminder"/'),  ('body', '')]
    

    然而我尝试使用这种模式 enter image description here

    我试着使用下面的模式

    我得到的结果是

    [('note', ' date="8/31/12">'), ('t', 'o>Tove</to>'), ('fro', 'm>Jani</from>'), ('heading', ' type="Reminder"/>'), ('bod', "y>Don't forget me this weekend!</body>")]
    

    我应该如何正确地捕捉这两个,以便获得预期的输出

    1 回复  |  直到 4 年前
        1
  •  0
  •   Carl    4 年前

    您的第二个组是可选的,因此需要附加一个“?”: <([a-z]+)(\s?\w+=?"?.*)?> .

    作为一个普遍的建议,寻找你不想看到的东西,而不是你想看到的东西。例如,而不是 <([a-z]+) 您可以捕获所有内容,直到找到分隔符: <([^\s>\/]+) .与其搜索你可能得到的所有东西,不如搜索那些肯定会结束你的字符串的符号: [^>]+ .

    为了给你一个更好的解决方案: <(\w+)([^>]+)?> .我没有执行第一个建议,因为你的标签似乎没有包含特殊符号。

    附言: 下次你应该把你的正则表达式作为文本发布。