Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 反转或反转正则表达式匹配_C#_Regex - Fatal编程技术网

C# 反转或反转正则表达式匹配

C# 反转或反转正则表达式匹配,c#,regex,C#,Regex,我已经看到并阅读了几篇关于负匹配的文章,即使用not运算符,但我正在寻找一些稍微不同的东西。我想匹配和替换,但使用相反的选择 我将用一个比喻来解释: 想象一下文字处理文档。使用“搜索和替换”时,在某些软件中,您可以获得文档中所有匹配项的突出显示。有了正则表达式,这当然是匹配项,我可以用我喜欢的任何东西来替换它们。但是如果我想用一些短语来代替其他的东西呢 假设我有一个允许的单词列表,为了简单起见,它现在只包含一个单词,我非常挑剔,我想用经过审查的字符串替换所有不允许的单词 如果输入是我很好,很友好

我已经看到并阅读了几篇关于负匹配的文章,即使用not运算符,但我正在寻找一些稍微不同的东西。我想匹配和替换,但使用相反的选择

我将用一个比喻来解释:

想象一下文字处理文档。使用“搜索和替换”时,在某些软件中,您可以获得文档中所有匹配项的突出显示。有了正则表达式,这当然是匹配项,我可以用我喜欢的任何东西来替换它们。但是如果我想用一些短语来代替其他的东西呢

假设我有一个允许的单词列表,为了简单起见,它现在只包含一个单词,我非常挑剔,我想用经过审查的字符串替换所有不允许的单词

如果输入是我很好,很友好,我喜欢穿忍者服装,那么输出应该被审查,审查,审查


这是一个一般性的问题,但我自己主要使用C,如果我要实现这一点,很可能会在C中使用正则表达式。

您可以捕获周围的所有文本,并使用这样的正则表达式。\*?和|。\*$使用/g选项。这将匹配and之前的所有文本片段以及最后and之后的最后一段文本。然后,您必须处理匹配组,以更换正确的零件,并保留和: 您可以使用

(.+?)(\s?and\s?|$)
并替换为

(censored)$2

这是一种基于正则表达式的简单方法。拆分模式以捕获的组为特征,用于整个单词,并且:

输出:AND和


请参阅

谢谢您的回复,我将尝试所有这些有趣的方法。我添加此评论是为了让您知道,我还需要一段时间才能开始测试,但请不要将我缺乏反馈误认为我忘恩负义或不关心他人谢谢你的回复,他们都很有用,我从他们每个人身上都学到了一些东西。Wiktor中的一个对我来说很容易使用,当我在它上面抛出一些更复杂的例子时,它表现得最好,比如用and开始输入。我喜欢这样的日子,再次感谢!重温老问题。这个答案非常好,只有一个边缘案例问题:如果文本以and开头,那么前面的and将被删除。
var str = "I am nice and friendly and I like to wear ninja outfits";
var rx = new Regex(@"(\band\b)");
var res = rx.Split(str).Select(x => x == "and" ? x : // Keep "and"
          !String.IsNullOrWhiteSpace(x) ?            // If x is not null or empty
               "<censured>" : "")              // Replace with <censured>, else emtpy string
          .ToList();
Console.WriteLine(string.Join("", res));