有条件的正则表达式模板

时间:2019-01-03 14:16:11

标签: regex regex-group

我想使用Regex在模板上包括或排除条件文本。

一个简单的模板:

#IF {{Placeholder}}
If true the text should remain, else it should be deleted
#ENDIF

在第一次运行时,我将占位符替换为简单的true或false字符串:

#IF false
If true the text should remain, else it should be deleted
#ENDIF

在第二次运行中,我使用以下正则表达式应用条件:

Regex.Replace(input, "(?s)#IF false.*?#ENDIF\r\n", "", RegexOptions.Compiled);

如果占位符为“ false”,则将按预期方式删除全文块。

现在缺少的是“ true”条件,这是一个正则表达式,保留了内部文本,并仅删除了该组的“ #IF true”和“ #ENDIF”行

If true the text should remain, else it should be deleted

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

在这里,假设我在这里所做的事与#ENDIF都将被删除无关。如果为true,则注释将被删除;如果为false,则整个块将被删除。因此,考虑到这一点使正则表达式。它满足您的两个需求。如果为true,则删除注释,如果为false,则删除整个块。

正则表达式:'(?:(?:#IF\s(?:false)\n).*)|(?:#IF true\n)(?<=#IF true\n)|(?:#ENDIF)\n?'

这里是示例的链接,其中包含您在此处提供的数据。 https://regex101.com/r/cFy11t/9

答案 1 :(得分:1)

当为true时,只需捕获IF和ENDIF之间的线,并将其值用作替换:

(?s)#IF\s*false.*?#ENDIF|#IF\s*true\R(.+?)\R#ENDIF

Demo