下面是我一直在使用的字符串(示例基于Apple的编码和电子邮件示例):
2.3|[jappleseed@example.com][pwd_removed][johnnyappleseed@example.com][Johnny][Appleseed][APPLES]
这来自我使用的持有帐户的数据库。注册的每个人都必须拥有这些,因此每行的格式都相同。它们将是不同的信息,但仍然格式相同。要注册帐户,您需要用户名,密码(对我来说是不可见的),电子邮件地址和6个字符的代码。
我要做的是将用户名,电子邮件地址,名字,姓氏和6个字符代码放入不同的组中。以下是我一直在研究的正则表达式声明:
^.*\[(.*)\]$
此语句的问题在于它匹配语句中的所有内容,并且我希望它在组中匹配。我知道这是我需要使用Split方法的地方,但我不知道如何使用Split方法在组中放置我想要的东西。所以我的问题是:我是否必须为一个组制作多行代码,或者是否有一种方法可以让我的生活变得更轻松?任何帮助将不胜感激!
答案 0 :(得分:2)
不需要正则表达式。只需在'['
和']'
上拆分,删除空条目,然后跳过第一部分(2.3
):
string[] parts = input.Split(new[] { '[', ']' }, StringSplitOptions.RemoveEmptyEntries)
.Skip(1).ToArray();
答案 1 :(得分:0)
答案 2 :(得分:0)
您要求6个不同的捕获组,因此您正在查看类似的模式:
@"^.*\[(?<username>[^\]]+)\]\[(?<password>[^\]]+)\]\[(?<email>[^\]]+)\]\[(?<fname>[^\]]+)\]\[(?<lname>[^\]]+)\]\[(?<charcode>[^\]]+)\]"
这是一个命名捕获组的示例,可以这样访问:
string data = "2.3|[jappleseed@example.com][pwd_removed][johnnyappleseed@example.com][Johnny][Appleseed][APPLES]";
string pattern = @"^.*\[(?<username>[^\]]+)\]\[(?<password>[^\]]+)\]\[(?<email>[^\]]+)\]\[(?<fname>[^\]]+)\]\[(?<lname>[^\]]+)\]\[(?<charcode>[^\]]+)\]";
Match match = Regex.Match(data, pattern);
if (match.Success)
{
Console.WriteLine(match.Groups["username"]);
Console.WriteLine(match.Groups["password"]);
Console.WriteLine(match.Groups["email"]);
Console.WriteLine(match.Groups["fname"]);
Console.WriteLine(match.Groups["lname"]);
Console.WriteLine(match.Groups["charcode"]);
}
结果:
jappleseed@example.com
pwd_removed
johnnyappleseed@example.com
Johnny
Appleseed
APPLES
否则,从捕获组中删除名称,您的模式如下:
@"^.*\[([^\]]+)\]\[([^\]]+)\]\[([^\]]+)\]\[([^\]]+)\]\[([^\]]+)\]\[([^\]]+)\]"
可以这样访问:
Console.WriteLine(match.Groups[1]);
Console.WriteLine(match.Groups[2]);
Console.WriteLine(match.Groups[3]);
Console.WriteLine(match.Groups[4]);
Console.WriteLine(match.Groups[5]);
Console.WriteLine(match.Groups[6]);