如何使用拆分使用正则表达式的前缀字符?
题
我想分割示例字符串:
有结果是〜彼得〜意向书〜克里斯〜梅格〜的Stewie
上的字符和~
彼得结果 洛伊丝结果 克里斯结果 梅格结果 的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+"'"))
;
}}
在#2中的正则表达式的分隔符,接着包含零个或多个非分隔符的匹配组相匹配。将得到的匹配是分隔的字符串(包括任何空字符串)。对于每个匹配,“match.Value”是包括前导定界符整个字符串和“match.Groups 1 .value的”是包含定界符自由字符串的第一个匹配组。
为了完整起见,第三编码(#3)被包括在表示#2相同的正则表达式的方法,但在一个LINQ编码样式。
如果您正在使用正则表达式挣扎,我高度推荐杰弗里精通正则表达式,第三版EF弗里德尔的。它是,到目前为止,对理解正则表达式最好助剂和后来作为一个很好的参考或进修根据需要
其他提示
在C#中,这似乎是得到你想要的东西:
"~Peter~Lois~Chris~Meg~Stewie".Split("~".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
下面是一个LINQ的方法...
请注意,与RegexOptions.ExplicitCapture比赛不包括在内。没有它的“〜”将被包括在内。
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();
}
}
}
不隶属于 StackOverflow