c#Regex.Replace [^ \ w]也删除下划线?

问题描述:

所以我花了很长时间在这个上,并且尝试了很多没有运气的东西。我认为我在正则表达式上很糟糕。我正在尝试清理所有非字母数字字符的字符串,但留下空格。我不想使用[^A-Za-z0-9 ]+由于语言问题。c#Regex.Replace [^ w]也删除下划线?

这里有几件事情我已经尝试:

cleaned_string = Regex.Replace(input_string, @"[^\w ]+[_]+);

cleaned_string = Regex.Replace(input_string, ([^\w ]+)([_]+));

cleaned_string = Regex.Replace(input_string, [^ \w?<!_]+);

编辑:解决了由于下面一个非常乐于助人的人。

我的最终产品最终是这样的:[_]+|[^\w\s]+

感谢所有帮助!

+0

我想你只是需要转义下划线'[^ \ w \ _'' –

+0

你的例子都没有编译。什么是“语言问题”?你的示例输入/输出是什么? – Blorgbeard

+0

@ stephen.vakil'\ _'是我尝试的第一件事情之一,它引起了一个例外。 –

这应该为你工作

// Expression: _|[^\w\d ] 
cleaned_string = Regex.Replace(input_string, @"/_|[^\w\d ]", ""); 
+0

这工作完美。我只是在表达中似乎缺少'|'。请投票,因为某些工具喜欢投票。 –

+0

没有概率的正则表达式有时候也会让我头疼! –

+0

我也注意到我不需要'\ d',因为它只用'\ w'。 –

您可以使用

var res = Regex.Replace(s, @"[\W_-[\s]]+", string.Empty); 

regex demo

看看\W模式:它匹配任何非单词字符。现在,您想要从\W中排除空白匹配模式 - 使用character class subtraction[\W-[\s]]。这匹配任何字符\W匹配除了什么\s匹配。并且要匹配_,只需将其添加到角色类。添加+量词可一次性删除整个连续的匹配字符块。

详细

  • [ - 任何非单词或_字符
  • -[\s] - - 除了用\s(空白)图案
  • 匹配字符一个字符类
    • \W_的开始
  • ] - 字符类的结尾
  • + - 一次或多次。
+1

不错,我在我的代码中换成了'\ s',但保持大致相同。好信息! –

+1

很好的解释,up-voteed,书签的regexstorm。 –