在C#中使用正则表达式分组进行子字符串匹配

3
我想使用正则表达式从一个字符串中获取子字符串。需要注意的是:这些字符串值是邮件主题。
String1 = "Acceptance :DT_Ext_0062-12_012ed2 [Describe]"

string2 = "Acceptance : DT_Ext_0062-12_012 (ed.2) , Describe"

string3 = "Acceptance of : DT_Ext_0062-12_012 (ed.2) , Describe to me"

子字符串:

sub1 = Acceptance            <Mail Type : like Reject or Accept>
sub2 = DT_Ext_0062-12_012    <ID : unique identifier>
sub3 = ed2                   <Edition of mail, like : ed1, ed2, ed3 ...so on>
sub4 = Describe              <Description of the mail>

我该如何编写正则表达式(可以分开写,也可以合并为一条)以获取以上两个字符串的输出结果。

我认为可以使用匹配组来检索数据。但我对正则表达式还很陌生。


1
什么是编程语言? - bhathiya-perera
我忘了提到...它是C#。 - Lokesh
你能展示更多的样本数据吗?如何将sub2与sub3分开的规则是什么? - Ibrahim Najjar
@Sniffer:上述字符串是邮件主题行。因此,没有分隔子字符串的规则。这是我也遇到的主要问题。但是,某些单词将是字符串中必须的,例如:DT_Ext、ed。但接受和描述可以作为字符串的任何值。 - Lokesh
接受字符串后面总是有冒号“:”吗?sub3和sub4之间总是有某种间距吗? - Ibrahim Najjar
@Sniffer:冒号“:”是必须的 - 是的。空格将如我在示例中所述。我还编辑了我的问题,只是为了提供更多信息,尽管没有什么好处。 - Lokesh
1个回答

1

试试这个:

// string strTargetString = @"Acceptance :DT_Ext_0062-12_012ed2 [Describe]";
// string strTargetString = @"Acceptance : DT_Ext_0062-12_012 (ed.2) , Describe";
string strTargetString = @"Acceptance of : DT_Ext_0062-12_012 (ed.2) , Describe to me";

 const string strRegex = @"\.*:\s*(DT_Ext_\d{4}-\d{2}_\d{3})\s*\W*(ed)\.?(\d+)(\W*[,])?(.*)";


RegexOptions myRegexOptions = RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.CultureInvariant;
Regex myRegex = new Regex(strRegex, myRegexOptions);


foreach(Match myMatch in myRegex.Matches(strTargetString))
{
    if(myMatch.Success)
    {
        // Add your code here
        var value = new {
            Value1 = myMatch.Groups[1].Value,
            Value2 = myMatch.Groups[2].Value,
            Value3 = myMatch.Groups[3].Value,
            Value4 = myMatch.Groups[5].Value,
        };
    }
}

已经正确获取了两个子字符串。谢谢。不过,“Acceptance”和“Describe”不是关键字。它们可以是字符串中的任何值。 - Lokesh
我刚刚意识到在我回答之前你稍微编辑了你的问题,所以我不知道你确切需要什么。如果我的回答有帮助,请将其标记为正确答案并点赞。谢谢。 - Rui Jarimba
我实际上没有得到我想要的,所以不能将其标记为我的答案。但是它确实帮助了我,我很想点赞它,但我自己没有足够的声望来做到这一点。 - Lokesh
假设字符串为“Acceptance of: DT_Ext_0062-12_012(ed.2),Describe to me”,就像我说的,Acceptance和Describe可以是任何字符串值。仍然没有得到期望的输出。可能有一些空格问题。 - Lokesh
1
谢谢你的帮助。在你提供了解决方案后,我自己尝试了一下,以下正则表达式可以用于String2,但是在string1中我得到了额外的“]”。正则表达式:@"(.*)\s*:\s*(DT_Ext_\d{4}-\d{2}_\d{3})\s*\W*(ed)\.?(\d+)\W*(.*)\W*"。看看你能否也帮我解决string1的问题。谢谢。 - Lokesh
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接