C#正则表达式忽略尾随字符

时间:2014-01-13 19:20:58

标签: c# regex

我正在使用C#中的Regex,并且无法找到我正在寻找的这个示例。我有一个结构如下的字符串

string arg = "Type / Subtype: 001 / 002 Additional pointless information that we don't need"

基本上我想知道的是如何在C#中格式化Regex以获得此字符串中的两个数字。最后的附加信息是动态的,因此我无法对该信息进行硬编码。

所以我现在就像这样:

Regex r = @Type / SubType: (\d+) / (\d+) "; 

但我不知道最后要放弃什么来忽略尾随字符,任何想法?

2 个答案:

答案 0 :(得分:6)

你不需要放任何东西。正则表达式允许给定字符串的部分匹配(除非您指定^$等锚点。

Regex r = new Regex(@"^Type / Subtype: (\d+) / (\d+)");
string arg = "Type / Subtype: 001 / 002 Additional pointless information that we don't need";
Match match = r.Match(arg);
if (match.Success)
{
    string num1 = match.Groups[1].Value;    // "001"
    string num2 = match.Groups[2].Value;    // "002"
}

需要注意的一点是:"SubType"在您的模式中使用CamelCase进行拼写,但在字符串中使用"Subtype"拼写,因此正则表达式如果匹配则不匹配-sensitive(默认值)。

编辑:要匹配最终字符串,只需添加带括号的通配符:

Regex r = new Regex(@"^Type / Subtype: (\d+) / (\d+) (.*)");
// ...
string remainder = match.Groups[3].Value;

请注意,前面的空格是必需的,并且.与换行符不匹配(除非您使用RegexOptions.Singleline选项)。

答案 1 :(得分:0)

我会使用前瞻或非捕获组作为前缀:

(?<=Type / Subtype: )(\d+)(?: / )(\d+)

现在,您只有两个被捕获的群组中有两个号码($1$2,或者c#有效),Type / Subtype:不会消耗匹配。