C#中的正则表达式用于提取部件

时间:2013-12-05 23:39:57

标签: c# regex

我有这样的文字: " </SYM field/NN name=/IN ""/"" object/NN ""/"" >/SYM Categories/NNS :/: Cars/NNS ,/, About/RB Model/NNP :/: "

我想提取诸如的值 Categories/NNS :/: Cars/NNS ,/, About/RB

模式所在  WORD + /NNS + :/: ANYTHING直到达到相同的模式

我试过了:

Match match = Regex.Match(input, @"([A-Za-z0-9\-]+)/NNS :/: ([A-Za-z0-9\-/s]+)",
    RegexOptions.IgnoreCase);

if (match.Success)
{
    string key = match.Groups[1].Value;
    Console.WriteLine(key);
}

我得到的答案是: Categories

而不是

Categories/NNS :/: Cars/NNS ,/, About/RB

我做错了什么?

2 个答案:

答案 0 :(得分:1)

您需要将所需的正则表达式的位括在括号内。

要获得你想要的东西,你需要更换你的正则表达式(未经过测试,而且我不知道C#正则表达式的具体细节,但下面应该没问题):

"((?:[A-Za-z0-9\-]+)/NNS :/: (?:[A-Za-z0-9\-/s]+))"

主括号表示您将获得整个字符串作为结果。 左括号后面的左括号表示您不希望结果中包含该部分。

如果不放入?:,则会产生整个字符串的元组,然后匹配第一个子正则表达式的字符串,然后是匹配第二个子正则表达式的字符串。

答案 1 :(得分:0)

为什么不使用match.Value?你在括号中放的所有东西都代表一个群体,但看起来你想要整个东西。

Match match = Regex.Match(input, @"([A-Za-z0-9\-]+)/NNS :/: ([A-Za-z0-9\-/s]+)",
    RegexOptions.IgnoreCase);

if (match.Success)
{
    string key = match.Value;
    Console.WriteLine(key);
}