我有字符串,我想删除" \"后面的任何字词,无论是在中间还是在结尾,例如:
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 空格。我似乎无法弄清楚如何从反弹到下一个空白。另外,我不能保证最后有空格,所以我需要处理它。我可以继续处理字符串并删除反斜杠后的任何文本,但我希望我能一步处理这两种情况。
任何建议都将受到赞赏。
答案 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 ].