想象一个包含特殊字符的字符串,例如$§%% ..,数字和字母。
我想接收任意字符串的字母和数字垃圾作为字符串数组。
一个好的解决方案似乎是使用正则表达式,但是我不知道如何表达[数字和字母]
// example
"abc" = {"abc"};
"ab .c" = {"ab", "c"}
"ab123,cd2, ,,%&$§56" = {"ab123", "cd2", "56"}
// try
string input = "jdahs32455$§&%$§df233§$fd";
string[] output = input.Split(Regex("makejunksfromstring"));
答案 0 :(得分:2)
是的,正则表达式确实是一个很好的解决方案。
事实上,要匹配输入序列中的所有标准单词,这就是您所需要的:
(\w+)
让我快速解释一下
\ w匹配任何单词字符,等效于[a-zA-Z0-9_]-匹配a到z或A到Z或0-9或_,您可能想使用[a-zA-Z0- 9]避免使用下划线。
在()中包装一个表达式意味着您希望将该部分作为一个组捕获。
+表示您希望使用1个或多个上述字符的序列。
请参阅正则表达式备忘单以查看所有可能性,例如 https://cheatography.com/davechild/cheat-sheets/regular-expressions/
或者您在网上找到的任何东西。
还有一些工具可以快速测试您的正则表达式,例如 https://regex101.com/(非常直观的匹配) 或http://regexstorm.net/tester专门用于.NET
答案 1 :(得分:2)
要提取 1个或多个字母/数字的块,您可以使用
[A-Za-z0-9]+ # ASCII only letters/digits
[\p{L}0-9]+ # Any Unicode letters and ASCII only digits
[\p{L}\p{N}]+ # Any Unicode letters/digits
查看regex demo。
string[] output = Regex.Matches(input, @"[\p{L}\p{N}]+").Cast<Match>().Select(x => x.Value).ToArray();