C# - 正则表达式 - 替换不匹配的字符

Posted

技术标签:

【中文标题】C# - 正则表达式 - 替换不匹配的字符【英文标题】:C# - regex - replace non matching characters 【发布时间】:2021-09-17 19:48:10 【问题描述】:

[有类似的问题,但没有一个能满足我的需求]

我允许用户输入匹配这个正则表达式的文本:

string validChars = @"^[A-Za-zÀ-ÖØ-öø-ÿ0-9\s\.\-\&\,\'\(\)_\/\""\!\:\%]*?$";

我想要做的是删除与该正则表达式不匹配的字符

我怎样才能反转正则表达式以便我可以这样做

invalidChars  = some_trick_to_invert_regex(validChars); 
text = Regex.Replace(text, invalidChars , "");

感谢您的帮助

【问题讨论】:

你试过string invalidChars = @"[^A-Za-zÀ-ÖØ-öø-ÿ0-9\s\.\-\&\,\'\(\)_\/\""\!\:\%]";吗? 我并不完全清楚你想要什么。一方面你预设了一个正则表达式,然后说你想要那个正则表达式的逆。这与您随后展示的内容完全不同(一种采用任何正则表达式并“反转”它的方法)。那么你真正在寻找这两个中的哪一个? 正则表达式用作验证器,如果它不匹配,则某些字符是错误的,我们会返回一个错误...YET!!我们也从第三方接收数据......我们必须把他们的数据......我只想删除不匹配的字符,使用相同的正则表达式 我们的想法是只维护一个正则表达式而不是两个,以防我们添加/删除字符 为什么不只使用逆正则表达式?对于验证,您只需检查它是否有 0 个匹配项 -> 有效。这样,您只需要维护 1 个正则表达式(并且很容易获得允许的集合的逆)并且您获得了您似乎正在寻找的所有功能? 【参考方案1】:

您可以通过将^ 放在括号内来将要保留的字符列入白名单。示例:

string validChars = @"[^A-Za-zÀ-ÖØ-öø-ÿ0-9\s\.\-\&\,\'\(\)_\/\""\!\:\%]";
string test = "abc#de";
var result = Regex.Replace(test, validChars, ""); //abcde

【讨论】:

以上是关于C# - 正则表达式 - 替换不匹配的字符的主要内容,如果未能解决你的问题,请参考以下文章

C#常用正则表达式回顾

C#正则表达式指定替换

了解下C# 正则表达式

正则表达式替换 C 块注释之间的字符串

正则表达式匹配超过 2 个空格但不匹配新行

C# 正则表达式