正则表达式替换特殊字符

时间:2018-04-13 01:58:51

标签: c# regex

我的正则表达式需要帮助。

我需要删除在文本开头

中找到的特殊字符

例如我有这样的文字

.just a $#text this should not be incl#uded

输出应该是这样的

just a text this should not be incl#uded

I've been testing my regex here but i can't make it work

([\!-\/\;-\@]+)[\w\d]+

如何限制正则表达式只检查以特殊字符开头的文本?

谢谢

4 个答案:

答案 0 :(得分:2)

使用\B[!-/;-@]+\s*\b

var result = Regex.Replace(s, @"\B[!-/;-@]+\s*\b", "");

请参阅regex demo

<强>详情

  • \B - 字边界以外的位置(必须在当前位置的左侧立即开始字符串或非字字符)
  • [!-/;-@]+ - 一个或多个ASCII标点符号
  • \s* - 0+空白字符
  • \b - 字边界,当前位置右侧必须有字母/数字/下划线。

如果您打算删除所有标点符号和符号,请使用

var result = Regex.Replace(s, @"\B[\p{P}\p{S}]+\s*\b", "");

请参阅another regex demo

请注意\p{P}匹配任何标点符号,\p{S}匹配任何符号。

答案 1 :(得分:1)

使用前瞻:

(^[.$#]+|(?<= )[.$#]+)

^[.$#]+用于匹配行首的特殊字符。

(?<= )[.$#]+)用于匹配句子中单词开头的特殊字符。

根据需要在角色组[]中添加特殊字符。

答案 2 :(得分:1)

以下是您的问题详细信息中的两个可能选项。希望它会对你有所帮助。

string input = ".just a $#text this should not be incl#uded";

//REMOVING ALL THE SPECIAL CHARACTERS FROM THE WHOLE STRING    
string output1 = Regex.Replace(input, @"[^0-9a-zA-Z\ ]+", "");

// REMOVE LEADING SPECIAL CHARACTERS FROM EACH WORD IN THE STRING. WILL KEEP OTHER SPECIAL CHARACTERS     
var split = input.Split();
string output2 = string.Join(" ",  split.Select(s=> Regex.Replace(s, @"^[^0-9a-zA-Z]+", "")).ToArray());

答案 3 :(得分:1)

否定前瞻在这里很好:

(?![\.\$#].*)[\S]+

https://regex101.com/r/i0aacp/11/

[\S]匹配任何字符

(?![\.\$#].*)否定前瞻意味着这些字符[\S]+不应以\.\$#

中的任何一个开头