C# 选择表达式前后的第一个字符

C# 选择表达式前后的第一个字符,c#,regex,C#,Regex,我有一个字符串,它在UI中显示为某个公司名称,但在HTML中它是一些HTML文本,一些公司名称,一些HTML文本。别问我为什么 如何选择公司名称 用C中的正则表达式?当然,某些公司名称可以是任何其他公司名称 另外,一个模式可以重复多次 注释中的p.p.S.CompanyName是一个标记。我假设您的公司名称包含在一个更大的HTML中,并且该公司是以您描述的奇怪方式使用注释分隔的 因此,您希望提取使用蓝色文本分隔的红色文本。您希望忽略绿色文本 在这种情况下,您可以按如下方式提取公司名称: var

我有一个字符串,它在UI中显示为某个公司名称,但在HTML中它是一些HTML文本,一些公司名称,一些HTML文本。别问我为什么

如何选择公司名称

用C中的正则表达式?当然,某些公司名称可以是任何其他公司名称

另外,一个模式可以重复多次


注释中的p.p.S.CompanyName是一个标记。

我假设您的公司名称包含在一个更大的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);
}
如果您只是想用另一个名称替换公司名称,而不使用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注释,您必须将这些组放回模式中,并进行更高级的替换

从字符串中删除所有html注释。 搜索要查找的字符串。 查找带有注释的字符串,可能使用此注释作为基础。 从结果中删除注释。
我在问为什么?似乎在另一个问题上改进基于正则表达式的解决方案只会使问题更加复杂。在源代码处解决这个问题。因为有一个js富文本编辑器插件。因为这些是HTML/XML注释,所以我不需要正则表达式。我只需要将字符串输入到解析器,并获取结果文档的内部文本。有点脏,但简单的替换也可以做到这一点。如何在注释前后选择一个字符?在替换时,我不知道这些字符到底是什么。我相信公司名称可能会有所不同,所以您不能在正则表达式中逐字记录。@FrédéricHamidi:公司名称不在正则表达式中。new regex@?。?[^.-对我来说,它出现了两次,但我可能遗漏了一些东西。@FrédéricHamidi:我的理解是,CompanyName是文本中的一个标记,用于标识公司名称所在的位置。两个HTML注释之间的文本以及前后的字母是实际的公司名称。我明白了。你可能是对的,从问题上看不清楚。
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");