c# - 在 C# 中使用正则表达式从字符串中删除无效字符
问题描述
我发现了有关此主题的几篇文章,但提到的解决方案在我的情况下不起作用。
考虑以下代码:
static void Main(string[] args)
{
string rgs = "^[ -~]*(?:\r?\n[ -~]*)*$";
string TestStrNoMatch = "One\tTwo\r\nThree Ö";
string TestStrMatch = "OneTwo\r\nThree ";
Regex rgx = new Regex(rgs);
bool Match = rgx.IsMatch(TestStrNoMatch); // false
Match = rgx.IsMatch(TestStrMatch); // true
string result = Regex.Replace(TestStrNoMatch, rgs, "");
// result is the same as TestStrNoMatch
}
预期的结果是删除 \t 和 Ö,但这并没有发生。结果的值与 TestStrNoMatch 完全相同
澄清:我在示例中使用的正则表达式仅允许空格和 ~ (英文字母、数字和一些特殊字符)之间的字符以及 Windows 和 Unix 格式的换行符。我想删除其他所有内容。
解决方案
您的正则表达式需要匹配您要删除的字符才能使 regex.replace 起作用。因为您的模式与任何内容都不匹配,所以没有任何内容被替换。目前尚不清楚您要删除的具体内容,但这里有一个示例:
该模式(\\t)|(Ö)
匹配制表符和 Ö 字符,所以
string sample = "ab\tcefÖ";
string pattern = "(\\t)|(Ö)";
string result = Regex.Replace(sample, pattern, "");
System.Console.WriteLine("SAMPLE : " + sample);
System.Console.WriteLine("RESULT : " + result);
结果是
SAMPLE: ab cefÖ
RESULT: abcef
如果您准确解释要删除的所有内容,我可以为您指出更具代表性的正则表达式模式。例如,要删除空格和 ~ 之间的所有字符以及制表符,您可以使用[^ -~]|(\\t)
.
推荐阅读
- visual-studio - Ctrl+Shift+右箭头在 Visual Studio 2019 中不起作用
- spring - 使用 Spring 在非 Web 应用程序中使用 ElasticSearch 客户端
- foreach - 使用 ForEach 时,在 SwiftUI 中选择时是否可以更改 tabItem 的图像?
- apache-flink - Flink 中的检查点随时间增加
- javascript - Javascript- 使 JSON 排序函数可扩展为 Date 对象
- python - 读取使用 O_DIRECT 标志打开的文件
- django - Django:多对多关系将模型中的所有对象放在另一个对象中
- security - 使用 TPM2 安全地存储密钥
- reactjs - reactjs传递组件数组
- go - 使用其他文件的功能是其他目录Golang