我有这样的文字:
" </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
我做错了什么?
答案 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);
}