繁体   English   中英

正则表达式在C#中不匹配

[英]Regex not matching in C#

我有以下字符串:

 string error = "<MESSAGES><MESSAGE SEVERITY=\"2\" NUMBER=\"16\" TEXT=\"The Record Case is locked by user\" /></MESSAGES>";

我想匹配TEXT=\\"和以下\\

我正在使用以下表达式var regex = new Regex(@"TEXT=\\\\""(.*?)\\\\");

Expresso告诉我这个正则表达式是正确的。 RegExr告诉我这个正则表达式是正确的。

但C#不同意。

我试过了

  • Groups[]和match.Value。
  • \\x22而不是"因为我认为它可能是一个逃避问题。
  • /TEXT=\\""(.*?)\\/g

一切都无济于事。

我错过了什么?

使用XElement ,您有一个XML片段:

var error = "<MESSAGES><MESSAGE SEVERITY=\"2\" NUMBER=\"16\" TEXT=\"The Record Case is locked by user\" /></MESSAGES>";
var xe = XElement.Parse(error);
var res = xe.Elements("MESSAGE")
                   .Where(p => p.HasAttributes && p.Attributes("TEXT") != null)
                   .Select(n => n.Attribute("TEXT").Value)
                   .ToList();

输出:

在此输入图像描述

请注意,输入字符串非常大, .*? 可能导致灾难性的回溯,这就是为什么你应该尽可能避免使用它。 如果你需要一个正则表达式(因为你的一些输入不是XML有效的),你可以使用:

var attr_vals = Regex.Matches(error, @"(?i)\bTEXT=""([^""]+)""")
             .OfType<Match>()
             .Select(p => p.Groups[1].Value)
             .ToList();

(比Karthik快2倍,在regexhero.com上测试过)

输出:

在此输入图像描述

请注意,使用正则表达式,您将获得所有未更改的XML实体(例如&amp;而不是& )。 稍后您将不得不使用System.Web.HttpUtility

使用以下内容(您的实际字符串将被编译为不带\\的字符串..因为您只是将它们用作转义字符):

var regex = new Regex(@"TEXT=""([^""]+)""");

这对我有用:

Regex.Match(error, "TEXT=\\\"(.*?)\\\"")

你需要的逃生\\"字与\\

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM