[英]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实体(例如&
而不是&
)。 稍后您将不得不使用System.Web.HttpUtility
。
使用以下内容(您的实际字符串将被编译为不带\\
的字符串..因为您只是将它们用作转义字符):
var regex = new Regex(@"TEXT=""([^""]+)""");
这对我有用:
Regex.Match(error, "TEXT=\\\"(.*?)\\\"")
你需要的逃生\\
和"
字与\\
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.