在每个非字母/非数字字符处分割字符串

时间:2020-04-06 19:48:22

标签: c# regex string

想象一个包含特殊字符的字符串,例如$§%% ..,数字和字母。

我想接收任意字符串的字母和数字垃圾作为字符串数组。

一个好的解决方案似乎是使用正则表达式,但是我不知道如何表达[数字和字母]

// 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"));

2 个答案:

答案 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

C# usage

string[] output = Regex.Matches(input, @"[\p{L}\p{N}]+").Cast<Match>().Select(x => x.Value).ToArray();