我正在使用C#中的Regex,并且无法找到我正在寻找的这个示例。我有一个结构如下的字符串
string arg = "Type / Subtype: 001 / 002 Additional pointless information that we don't need"
基本上我想知道的是如何在C#中格式化Regex以获得此字符串中的两个数字。最后的附加信息是动态的,因此我无法对该信息进行硬编码。
所以我现在就像这样:
Regex r = @Type / SubType: (\d+) / (\d+) ";
但我不知道最后要放弃什么来忽略尾随字符,任何想法?
答案 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:
不会消耗匹配。