如何从正则表达式中提取特定的短语,并将它们放在c#中的不同组中

本文关键字:正则表达式 提取 短语 | 更新日期: 2023-09-27 18:04:53

下面是我已经研究了一段时间的字符串(示例基于Apple的编码和电子邮件示例):

2.3|[jappleseed@example.com][pwd_removed][johnnyappleseed@example.com][Johnny][Appleseed][APPLES]

这来自我使用的保存帐户的数据库。每个注册的人都必须有这些,所以每一行都是相同的格式。它们将是不同的信息,但格式仍然相同。为了注册一个帐户,你需要一个用户名,密码(这对我来说是不可见的),一个电子邮件地址和一个6个字符的代码。

我要做的是采取用户名,电子邮件地址,名,姓,和6个字符的代码到不同的组。下面是我一直在研究的一个正则表达式语句:

^.*'[(.*)']$

这个语句的问题是它匹配了语句中的所有内容,而我希望它分组匹配。我明白这是我需要使用分裂方法的地方,但我不知道如何使用分裂方法来放置我想要的组。所以我的问题是:我是否必须为一个组编写多行代码,或者是否有一种方法可以使我的工作变得容易得多?任何帮助将不胜感激!

如何从正则表达式中提取特定的短语,并将它们放在c#中的不同组中

不需要正则表达式。只拆分'['']',删除空条目,然后跳过第一部分(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]);