使用正则表达式解析字符串中的文本

时间:2011-10-26 15:55:11

标签: c# regex

我需要一位RegEx大师来帮助我(我是一个菜鸟)。我有以下字符串,我想解析客户端ID和合同ID(使用C#)。我可以使用一堆字符串函数来完成它,但我认为RegEx可能更清晰。任何人都可以帮我这么做吗?

以下是字符串的示例: “FW:订单合同 - 11009972;客户 - 5424 - TOYOTA CO; AE ID - 160SB已完成”

我需要获得以下值: 11009972放入ContractID变量 5424放入一个CustomerID变量

现在的问题是ContractID和CustomerID可以是任意长度,但它们将始终是数字值,前面是“Contract - ”或“Customer - ”,它们将始终处于相同的顺序。字符串文本的其余部分可能会在内容和长度上发生变化,但可以将其丢弃。所以我想找到“Contract - ”或“Customer - ”之后的数字,直到下一个空格或分号(或任何非数字字符)。

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:1)

使字符串的重要部分始终具有相同的格式意味着正则表达式可以非常简单。

string text ="FW: Order Contract - 11009972; Customer - 5424 - TOYOTA CO; AE ID - 160SB Completed";
Regex myRegex = new Regex(@"Contract - (\d+); Customer - (\d+)");
var match = myRegex.Match(text);
// match.Groups[1].Value is the ContractId
// match.Groups[2].Value is the CustomerID 

答案 1 :(得分:1)

尝试以下方法,

string text = "FW: Order Contract - 11009972; Customer - 5424 - TOYOTA CO; AE ID - 160SB Completed";
Match match = Regex.Match(input, @"^.*Contract - (\d+); Customer - (\d+).*$", RegexOptions.IgnoreCase);
if (match.Success)
{
    string contract = match.Groups[1].Value;
    string contract = match.Groups[2].Value;
}

答案 2 :(得分:0)

您可以使用此^.*Contract\s*-\s*(\d*).*Customer\s*-\s*(\d*).*$

这会将合同ID放在第1组,将客户ID放在第2组中。

string subjectString = "FW: Order Contract - 11009972; Customer - 5424 - TOYOTA CO; AE ID - 160SB Completed";
ContractId = Regex.Match(subjectString, 
     @"^.*Contract\s*-\s*(\d*).*Customer\s*-\s*(\d*).*$", 
     RegexOptions.Multiline).Groups[1].Value;
CustomerId = Regex.Match(subjectString, 
     @"^.*Contract\s*-\s*(\d*).*Customer\s*-\s*(\d*).*$",  
     RegexOptions.Multiline).Groups[2].Value;