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# - 正则表达式 - 替换不匹配的字符的主要内容,如果未能解决你的问题,请参考以下文章