C# 在每个非字母/非数字字符处拆分字符串

C# 在每个非字母/非数字字符处拆分字符串,c#,regex,string,C#,Regex,String,假设一个字符串包含特殊字符,如$§%%,、数字和字母 我希望接收任意字符串的字母和数字作为字符串数组 一个很好的解决方案似乎是使用正则表达式,但我不知道如何表达[数字和字母] // example "abc" = {"abc"}; "ab .c" = {"ab", "c"} "ab123,cd2, ,,%&$§56" = {"ab123", "cd2", "56"} // try string input = "jdahs32455$§&%$§df233§$fd"; stri

假设一个字符串包含特殊字符,如$§%%,、数字和字母

我希望接收任意字符串的字母和数字作为字符串数组

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

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

是的,regex确实是一个很好的解决方案

事实上,要匹配输入序列中的所有标准单词,您只需要:

(\w+)
让我快速解释一下

\w匹配任何单词字符,并且相当于[a-zA-Z0-9_U9]-匹配a到z或a到z或0-9或U9,您可能希望使用[a-zA-Z0-9]来避免该下划线

将表达式包装在()中意味着您希望将该部分作为一个组捕获

+表示需要前面的一个或多个字符的序列

参考正则表达式备忘单查看所有可能性,例如

或者任何你在网上找到的

还有一些工具可用于快速测试正则表达式,例如 (非常好的可视化匹配)
或者特别是对于.NET来说,是的,regex确实是一个很好的解决方案

事实上,要匹配输入序列中的所有标准单词,您只需要:

(\w+)
让我快速解释一下

\w匹配任何单词字符,并且相当于[a-zA-Z0-9_U9]-匹配a到z或a到z或0-9或U9,您可能希望使用[a-zA-Z0-9]来避免该下划线

将表达式包装在()中意味着您希望将该部分作为一个组捕获

+表示需要前面的一个或多个字符的序列

参考正则表达式备忘单查看所有可能性,例如

或者任何你在网上找到的

还有一些工具可用于快速测试正则表达式,例如 (非常好的可视化匹配) 或者特别针对.NET来提取您可能使用的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 
见a

:

string[]output=Regex.Matches(输入,@“[\p{L}\p{N}]+”).Cast().Select(x=>x.Value.ToArray();
提取您可能使用的一个或多个字母/数字块

[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 
见a

:

string[]output=Regex.Matches(输入,@“[\p{L}\p{N}]+”).Cast().Select(x=>x.Value.ToArray();

你说的“垃圾”是指“大块”?也很难理解你想要什么。你能清楚地写出一些你所期望的输入及其相应输出的例子吗?我已经添加了越来越清楚的内容examples@JNevill谢谢,但请解释您的正则表达式如何尊重数字和字母勾出“单词字符”的解释:
\w
匹配单词字符,
\w
(大写)匹配非单词字符regex.matches返回一个集合,是否确实要将其转换为数组?另外,返回所有匹配的
[A-Za-z0-9]+
,而不是拆分。看看“垃圾”你是说“大块”?也很难理解你想要什么。你能清楚地写出一些你所期望的输入及其相应输出的例子吗?我已经添加了越来越清楚的内容examples@JNevill谢谢,但请解释您的正则表达式如何尊重数字和字母勾出“单词字符”的解释:
\w
匹配单词字符,
\w
(大写)匹配非单词字符regex.matches返回一个集合,是否确实要将其转换为数组?另外,返回所有匹配的
[A-Za-z0-9]+
,而不是拆分。查看*空格也应算作“特殊”字符i使用
字符串s=Regex.Split([a-zA-Z0-9]+)并且它仍在使用.,,,*空格也应计为“特殊”字符。使用
字符串s=Regex.Split(s,([a-zA-Z0-9]+)”并且它仍然使用.,,最后我也使用了匹配而不是分割。我用[A-Za-z0-9]+完成了这项工作,并使用了match集合。谢谢你的回答。最后我还使用了匹配而不是分割。我用[A-Za-z0-9]+完成了这项工作,并使用了match集合。谢谢你的回答。