反转字符串并保留引号中的单词
本文关键字:单词 保留 字符 字符串 串并 | 更新日期: 2023-09-27 18:31:36
我正在尝试反转字符串中的单词,但保留引号中的顺序。例如,假设我有这个字符串:
你好和世界或白狐狸
这就是我通常如何实现这一目标:
string source = "hello and world or white fox";
string[] words = source.Split(' ');
words = words.Reverse().ToArray();
string newSource = string.Join(" ", words);
这将导致:
狐狸白或世界和你好
现在假设我将源更改为"hello and world 或"white fox"。使用此算法,输出为"狐狸"白色或世界和你好"。有没有办法保留"白狐狸"的顺序,这样我就会得到"白狐狸"或世界和你好"之类的东西?
这样的事情会起作用:
string newSource = String.Join(" ",
Regex.Matches(source, @"'w+|""['w's]+""").Cast<Match>().Reverse());
这将找到由字母、数字或下划线组成的任何单个"单词",或由引号括起来的单词和空格字符的组合,然后反转匹配并连接结果。
结果将是这样的:
-
"hello and world or white fox"
=>"fox white or world and hello"
. -
"hello and world or '"white fox'""
=>"'"white fox'" or world and hello"
.
不幸的是,这将完全忽略任何非单词字符(例如 "foo - bar"
=> "bar foo"
),但可以修改模式以考虑其他字符。
注意: 请参阅 MSDN Word 字符: ''w 了解单词字符的精确定义。
此模式将仅匹配引号外的空格('s)(?=(?:(?:[^"]*"[^"]*){2})*$)|'s(?!.*")
演示