正则表达式 - 捕获组whish可以选择包含在字符序列中

问题描述 投票:0回答:1

我有一个文件,其中包含需要从类似 JSON 的语法中提取的行。 我的正则表达式在大多数情况下运行良好。它将所需的符号提取到第二个捕获组中。但我注意到有时我想要的文本可以选择包含在一些我想忽略的标签中。

示例文件:

    {"title_available" "text1"}
    {"title_value" "<c(20a601)>text2"}
    {"tags"
        {"all" "text3"}
        {"ignore" "text4"}
        {"chargeFactor" "text5 %1%"}
        {"resourceSpeed" "%1% text6"}
    }
    {"rules" "bla-bla-bla\n\n \"BLA\" bla-bla-bla."}
            {"id1" "<c(c3baae)>text7</c>"}

我的正则表达式: \s+{"\S+" "()?(.+)"}

所需输出:

text1
text2
text3
text4
text5 %1%
%1% text6
bla-bla-bla\n\n \"BLA\" bla-bla-bla.
text7

电流输出

all ok except:
text7</c>

我想我需要以某种方式对第二个捕获组使用前瞻,但我没有找到如何操作。另外,我不确定是否应该使用捕获组来跳过第一个可选 。有人可以帮忙吗?

附注模式的速度或简单性并不重要。

python regex regex-group
1个回答
0
投票

您的正则表达式似乎没有排除第三个捕获组中的结束标记

</c>
。要解决此问题,您可以调整正则表达式以排除结束标记(如果存在)。

喜欢:

\s+{"\S+" "(?:<c\S+>)?(.+?)(?:<\/c>)?"}
© www.soinside.com 2019 - 2024. All rights reserved.