regex 如何根据匹配条件捕获两个标记之间的多行正则表达式?

1zmg4dgp  于 2023-05-01  发布在  其他
关注(0)|答案(1)|浏览(90)

我有一个由“[1]”标记分隔的文本片段组成的文本。我想使用正则表达式来选择(并最终删除)那些不包含星号的分隔片段。
范例

[1] "Q 1  Gender * modal2"
Gender          1   0.0165 0.00144 0.6990  0.555   
modal2          2   0.1588 0.01387 3.3636  0.010 **                 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
[1] "Q 1  Gender * interv"
Gender          1   0.0165 0.00144 0.6876  0.495
interv          4   0.0563 0.00492 0.5868  0.765             
[1] "Q 1  Acad_categ * Acad_field"....

在所呈现的文本中,第二个和第三个标签[1]之间的第二个片段将是所选择的片段。

1u4esq0p

1u4esq0p1#

就像这样..

/\[1\][^*]+?(?:(?=\[1\])|$)/

简明英语说明

匹配[1],后跟一个或多个不是星号的字符,可以包括换行符,后跟(但不包括在匹配中)[1]或匹配文本的结尾。

技术说明

\[1\]

匹配[1]

[^*]+?

以非贪婪的方式匹配一个或多个除星号以外的字符(因此,它可以找到最短的匹配,仍然可以在它的末尾找到下一部分)。

(?:(?=\[1\])|$))/

没有捕获任何东西-(?: ... )-匹配。..

(?=\[1\])

下面的字符是[1],但它不会在匹配时消耗它,只是检查它是否在那里(积极的前瞻Assert)。
或者...

$

正在匹配的字符串的结尾。

相关问题