我有这样的文字:
INIT -- FOO
UP: 1
UpLine #1
DOWN: 2
DownLine #1
DownLine #2
INIT -- BAR
UP: 0
DOWN: 2
DownLine #1
DownLine #2
我想基本上捕获像INIT - BAR这样的信息,我有1个,2个向下,以及它们的内容......然后对于INIT - FOO ...
我无法弄清楚如何做到这一点...... INIT是一个常数,FOO和BAR是变化的变量。
答案 0 :(得分:0)
这是一个使用命名捕获组来跟踪所有不同部分的正则表达式:
INIT\s*--\s*(?<label>\w+)\n
\s+UP:\s*(?<up>\d+)\n
(?<uplines>(?:\s+(?!\s*DOWN).*\n)*)
\s+DOWN:\s*(?<down>\d+)\n
(?<downlines>(?:\s+(?!\s*INIT).*\n)*)
我知道它有点乱,但它有效!
INIT\s*--\s*(?<label>\w+)\n
与INIT行匹配并捕获&#34;标签&#34;组
\s+UP:\s*(?<up>\d+)\n
匹配UP行和&#34; up&#34;组中的数字
(?<uplines>(?:\s+(?!\s*DOWN).*\n)*)
获得任何&#34;上线&#34;在DOWN线之前
\s+DOWN:\s*(?<down>\d+)\n
匹配DOWN行和&#34; down&#34;组中的数字
(?<downlines>(?:\s+(?!\s*INIT).*\n)*)
获得任何&#34;下线&#34;在下一个INIT之前
在regex101上试用。
备注强>:
\r\n
而不是n
。