为什么Regex.Split在使用正则表达式进行分割时会保留分隔符?

3

我有以下代码,用正则表达式将字符串分割:

string s = "test;3 régred";
string[] authorsList = Regex.Split(s, "(\\s+)|([\\p{P}\\p{S}])");
foreach (string q in authorsList)
{
    Console.WriteLine(q);
}

预期是分离并仅保留:

test 3 régred

但它存储了:

test ; 3 *space* régred

为什么它没有去掉分隔符?


2
这并不会对你有所帮助,但我建议你使用字面字符串而不是用另一个反斜杠转义你的反斜杠,例如 @"(\s+)|([\p{P}\p{S}])"。这样你就可以将正则表达式放入像RegExr或Regex101等在线工具中。 - Wai Ha Lee
2
不使用捕获组 () 运行它,例如 string[] authorsList = Regex.Split(s, "\\s+|[\\p{P}\\p{S}]"); 查看 https://ideone.com/BczkoU - The fourth bird
1
@WaiHaLee 这是一个我真的需要改掉的习惯,因为它比转义所有字符要简单得多。 - user6911980
1
@Thefourthbird 做得好 - 完美 - user6911980
1个回答

2

你可以使用(...)将分隔符放入捕获组中。移除它们后,代码将正常工作:

string[] authorsList = Regex.Split(s, @"\s+|[\p{P}\p{S}]");

输出:

测试
3
régred

此处供参考 逆问题


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接