我有一个在UI中显示为Some Company Name
的字符串,但在HTML中它是Some html text S<!--START CompanyName-->ome Company Nam<!--END CompanyName-->e some html text
。不要问我为什么。
如何选择S<!--START CompanyName-->ome Company Nam<!--END CompanyName-->e
在C#中使用Regex?当然,Some Company Name
可以是任何其他公司名称。
P.S。一个模式可以重复一次。
P.P.S。评论中的CompanyName
是一个标记。
答案 0 :(得分:1)
我假设你在一个更大的HTML中有公司名称,而且公司是以你描述的奇怪方式使用评论“分隔”。
因此,您希望使用蓝色文本提取“分隔”的红色文本。你想忽略绿色文本。
这是正确的,你可以像这样提取公司名称:
var text = "bla bla S<!--START CompanyName-->ome Company Nam<!--END CompanyName-->e more bla bla";
var regex = new Regex(@"(?<begin>.)<!--START CompanyName-->(?<middle>[^<]+)<!--END CompanyName-->(?<end>.)");
var match = regex.Match(text);
if (match.Success) {
var companyName = match.Groups["begin"].Value + match.Groups["middle"].Value + match.Groups["end"].Value;
Console.WriteLine(companyName);
}
简单地说,您创建一个匹配红色和蓝色文本的模式,然后通过添加组“抓取”红色文本。然后将这些组连接起来以创建最终结果。
如果您想在文本中找到“分隔”的所有公司名称,您可以使用Regex.Matches
方法:
var companyNames = regex.Matches(text).Cast<Match>()
.Select(match => match.Groups["begin"].Value + match.Groups["middle"].Value + match.Groups["end"].Value);
如果您只是想用其他名称替换公司名称(并且没有HTML评论),您可以使用Regex.Replace
从模式中删除组:
var text = "bla bla S<!--START CompanyName-->ome Company Nam<!--END CompanyName-->e more bla bla";
var regex = new Regex(@".<!--START CompanyName-->[^<]+<!--END CompanyName-->.");
var newText = regex.Replace(text, "ACME Industries");
如果你想保留HTML评论,你必须将这些组重新放回模式中并进行更高级的替换。
答案 1 :(得分:-1)