C# - 在特定字符后删除字符串中的单个单词

时间:2016-02-23 02:15:32

标签: c# regex string

我有字符串,我想删除" \"后面的任何字词,无论是在中间还是在结尾,例如:

testing a\determiner checking test one\pronoun

期望的结果:

testing a checking test one

我尝试过一个简单的正则表达式,它可以删除反斜杠和空格之间的任何内容,但它会产生以下结果:

string input = "testing a\determiner checking test one\pronoun";
Regex regex = new Regex(@"\\.*\s");
string output = regex.Replace(input, " ");

结果:

testing a one\pronoun

看起来这个正则表达式从反斜杠匹配到字符串中的 last 空格。我似乎无法弄清楚如何从反弹到下一个空白。另外,我不能保证最后有空格,所以我需要处理它。我可以继续处理字符串并删除反斜杠后的任何文本,但我希望我能一步处理这两种情况。

任何建议都将受到赞赏。

4 个答案:

答案 0 :(得分:1)

将与任何字符匹配的.*更改为\w*,只与字符匹配。

Regex regex = new Regex(@"\\\w*");
string output = regex.Replace(input, "");

答案 1 :(得分:0)

" *"匹配零个或多个任何类型的字符。考虑使用" \ w +"相反,它匹配一个或多个" word"字符(不包括空格)。

使用" +"而不是" *"允许反斜杠后跟一个非"字#34;字符保持不匹配。例如,在句子中没有找到匹配项#34;有时我会在句子中经历“无法控制的强制性”或散布反斜杠\字符!"

答案 2 :(得分:0)

使用您当前的模式,.*告诉解析器是"贪婪,"也就是说,尽可能多地占用字符串,直到它到达一个空格。在?之后添加*告诉它,使捕获尽可能小 - 一旦它到达第一个空间就停止。

接下来,您不仅要在空格处结束,而且要在空格或字符串末尾结束。 $符号捕获字符串的结尾,|表示或。使用括号将这些组合在一起,并且您的组共同告诉解析器停止在空格或字符串的末尾。您的代码将如下所示:

        string input = @"testing a\determiner checking test one\pronoun";
        Regex regex = new Regex(@"\\.*?(\s|$)");
        string output = regex.Replace(input, " ");

答案 3 :(得分:0)

 Try this regex (\\[^\s]*)
 (\\[^\s]*)
 1st Capturing group (\\[^\s]*)
 \\ matches the character \ literally
 [^\s]* match a single character not present in the list below
 Quantifier: * Between zero and unlimited times, as many times as possible, giving    back as needed [greedy]
 \s match any white space character [\r\n\t\f ].