我想要将下面的字符串:
~Peter~Lois~Chris~Meg~Stewie
按照字符~
进行分割,并得到以下结果:
Peter
Lois
Chris
Meg
Stewie
使用Javascript或C#中的标准字符串分割函数,第一个结果肯定是空字符串。我想避免忽略第一个结果,因为第一个结果实际上可能是空字符串。
我一直在试验使用正则表达式,但是却无法解决问题。我相信有人已经找到了优雅的解决方案。
我想要将下面的字符串:
~Peter~Lois~Chris~Meg~Stewie
按照字符~
进行分割,并得到以下结果:
Peter
Lois
Chris
Meg
Stewie
使用Javascript或C#中的标准字符串分割函数,第一个结果肯定是空字符串。我想避免忽略第一个结果,因为第一个结果实际上可能是空字符串。
我一直在试验使用正则表达式,但是却无法解决问题。我相信有人已经找到了优雅的解决方案。
针对您的需求,我看到有两个选项:
(1) 如果存在前缀字符,则删除该字符。
(2) 使用完整的正则表达式来分离字符串。
这两种方法都在以下代码中进行了说明:
using System;
using System.Linq;
using System.Text.RegularExpressions;
class APP { static void Main() {
string s = "~Peter~Lois~Chris~Meg~Stewie";
// #1 - Trim+Split
Console.WriteLine ("[#1 - Trim+Split]");
string[] result = s.TrimStart('~').Split('~');
foreach (string t in result) { Console.WriteLine("'"+t+"'"); }
// #2 - Regex
Console.WriteLine ("[#2 - Regex]");
Regex RE = new Regex("~([^~]*)");
MatchCollection theMatches = RE.Matches(s);
foreach (Match match in theMatches) { Console.WriteLine("'"+match.Groups[1].Value+"'"); }
// #3 - Regex with LINQ [ modified from @ccook's code ]
Console.WriteLine ("[#3 - Regex with LINQ]");
Regex.Matches(s, "~([^~]*)")
.OfType<Match>()
.ToList()
.ForEach(m => Console.WriteLine("'"+m.Groups[1].Value+"'"))
;
}}
"~Peter~Lois~Chris~Meg~Stewie".Split("~".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
using System;
using System.Linq;
using System.Text.RegularExpressions;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
string s = "~Peter~Lois~Chris~Meg~Stewie";
Regex.Split(s, "(~)", RegexOptions.ExplicitCapture)
.Where(i=>!String.IsNullOrEmpty(i))
.ToList().ForEach(i => Console.WriteLine(i));
Console.ReadLine();
}
}
}