我对Regex's感到很沮丧,我很惊讶能够达到我自己的目的。
到目前为止,我已经得到了这个:
string text = "Whoa here is some very cool text.<phone>222-222-5555</phone><timesCalled>6</timescalled>";
Regex phoneRegex = new Regex(@"<phone>(.*?)<\/phone>");
Regex calledRegex = new Regex(@"<timesCalled>(.*?)<\/timesCalled>");
string phone = phoneRegex.Match(text).Value;
string timesCalled = calledRegex.Match(text).Value;
这两个都给了我完整的标签和里面的值,我怎么做它所以它只返回标签里面的东西? 此外,我还需要一个最终的正则表达式,它会返回不在这些标记内的所有文本,所以Whoa here is some very cool text.
来自上面的示例。特殊标记总是出现在普通文本之后,如果重要的话。
编辑:感谢所有的答案,我仍然需要最终的正则表达式(上面加粗)。
到目前为止,我试过这个:
string pattern = @"^" + phoneRegex.Match(text).Value + calledRegex.Match(text).Value;
Regex textRegex = new Regex(pattern);
string normalText = textRegex.Match(text).Groups[1].Value;
但这没有任何回报。
答案 0 :(得分:2)
您想获得该组的价值:
calledregex.Match(text).Groups[1].Value
群组是从1开始的。
答案 1 :(得分:1)
如何使用Xml类读取/解析XML?
var doc = XElement.Parse("<root>" + text + "</root>");
string phone = doc.Descendants("phone").First().Value;
答案 2 :(得分:1)
这是我的建议,让您有机会搜索更多带有值的标签。
string text = "Whoa here is some very cool text.<phone>222-222-5555</phone><timesCalled>6</timesCalled>";
Regex regex = new Regex(@"<(?<tag>[^>]*)>(?<value>[^<]*)</\k<tag>>");
Match match = regex.Match(text);
string phone = match.Groups["value"].Captures[match.Groups["tag"].Captures.OfType<Capture>().FirstOrDefault(item => item.Value == "phone").Index].Value;
string timesCalled = match.Groups["value"].Captures[match.Groups["tag"].Captures.OfType<Capture>().FirstOrDefault(item => item.Value == "timesCalled").Index].Value;
答案 3 :(得分:0)
匹配的Value
是与模式匹配的所有内容。如果您只想要分组内容(标签内的内容),则必须通过Groups
属性访问它们。
string phone = phoneRegex.Match(text).Groups[1].Value;
string timesCalled = calledregex.Match(text).Groups[1].Value;
答案 4 :(得分:0)
在内联xml / html的情况下,我也会忽略大小写,有时候标记大写可能会很糟糕。
string text = "Whoa here is some very cool text.<phone>222-222-5555</phone><timesCalled>6</timesCalled>";
Regex phoneRegex = new Regex(@"<phone>(.*?)<\/phone>", RegexOptions.IgnoreCase);
Regex calledRegex = new Regex(@"<timesCalled>(.*?)<\/timesCalled>", RegexOptions.IgnoreCase);
string phone = phoneRegex.Match(text).Groups[1].Value;
string timesCalled = calledRegex.Match(text).Groups[1].Value;