如何从正则表达式中提取特定的短语,并将它们放在c#中的不同组中
本文关键字:正则表达式 提取 短语 | 更新日期: 2023-09-27 18:04:53
下面是我已经研究了一段时间的字符串(示例基于Apple的编码和电子邮件示例):
2.3|[jappleseed@example.com][pwd_removed][johnnyappleseed@example.com][Johnny][Appleseed][APPLES]
这来自我使用的保存帐户的数据库。每个注册的人都必须有这些,所以每一行都是相同的格式。它们将是不同的信息,但格式仍然相同。为了注册一个帐户,你需要一个用户名,密码(这对我来说是不可见的),一个电子邮件地址和一个6个字符的代码。
我要做的是采取用户名,电子邮件地址,名,姓,和6个字符的代码到不同的组。下面是我一直在研究的一个正则表达式语句:
^.*'[(.*)']$
这个语句的问题是它匹配了语句中的所有内容,而我希望它分组匹配。我明白这是我需要使用分裂方法的地方,但我不知道如何使用分裂方法来放置我想要的组。所以我的问题是:我是否必须为一个组编写多行代码,或者是否有一种方法可以使我的工作变得容易得多?任何帮助将不胜感激!
不需要正则表达式。只拆分'['
和']'
,删除空条目,然后跳过第一部分(2.3
):
string[] parts = input.Split(new[] { '[', ']' }, StringSplitOptions.RemoveEmptyEntries)
.Skip(1).ToArray();
试试这个regex:
('[[^']]+'])
您要求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]);