gpt4 book ai didi

c# - 需要一个 C# 正则表达式模式,其中包含除排除字以外的任何字符

转载 作者:行者123 更新时间:2023-11-30 22:53:14 24 4
gpt4 key购买 nike

我正在尝试创建一个以“WORD”开头并匹配除原始“WORD”之外的所有字母、数字和字符直到出现“ENDWORD”的模式。

在这个例子中,我希望它匹配第二次出现的“WORD”并匹配到“ENDWORD”;但是,它是从第一次出现开始的,并没有正确排除第二次出现的“WORD”。

看起来好像技巧是匹配除“WORD”之外的任何字符。下面的示例使用由前面的“.”取反的否定前瞻。 (任何),但我不确定如何将肯定的“任何”或换行符集与否定词结合起来。任何帮助将不胜感激。

这是我在 LinqPad 中运行的示例 C# 程序。

无效主要(){

var text =
@"WORD
[asdf] ---
123/\*&
WORD
[asdf] ---
123/\*&
ENDWORD
[asdf] ---
123/\*&";

var pattern = $"(WORD).|\\n\\b(?!WORD)\\b.|\\n*(ENDWORD)";

Regex rgx = new Regex(pattern);
foreach (Match match in rgx.Matches(text))
{
match.Dump();
}

另一种陈述问题的方法是从“ENDWORD”开始(捕获它),回溯,忽略所有字符,直到找到第一次出现的“WORD”并将其捕获。只是修改以澄清“ENDWORD”不是字符串的结尾。

最佳答案

对于您的示例数据,您可以首先匹配前面有空格或制表符的 WORD。然后重复匹配不包含 WORD 的行,直到遇到包含以空格或制表符开头的 ENDWORD 的行。

要检查该行是否不包含 WORD,您可以使用否定先行。

[ \t]WORD\b.*(?:\r?\n(?!.*[ \t](?:END)?WORD\b).*)*\r?\n[ \t]+ENDWORD\b

解释

  • [\t] 匹配空格或制表符
  • WORD\b 匹配WORD和词边界
  • .* 匹配除换行符之外的任何字符 0+ 次
  • (?: 非捕获组
    • \r?\n(?!.*[\t](?:END)?WORD\b) 重复 0+ 次不包含可选 END 后跟 WORD
    • .* 如果是,则匹配整行
  • )* 关闭非捕获组并重复0+次
  • \r?\n[\t]+ENDWORD\b 匹配一个换行符,1+空格或制表符和带词边界的ENDWORD

Regex demo | C# demo

例如:

var pattern = @"[ \t]WORD\b.*(?:\r?\n(?!.*[ \t](?:END)?WORD\b).*)*\r?\n[ \t]+ENDWORD\b";

关于c# - 需要一个 C# 正则表达式模式,其中包含除排除字以外的任何字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57416386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com