正则表达式-匹配但排除

本文关键字:排除 -匹 正则表达式 | 更新日期: 2023-09-27 18:22:49

我有一个非常简单的任务,我试图在字符串中查找和替换特殊字符。我的正则表达式正在工作,但有时字符串中有斜体标记,我不想替换这些标记;我需要替换导致斜体标记变形的独立"<"answers">"字符。有没有一种方法可以让我匹配特殊字符,但不包括斜体字?这是我的代码:

string sampleText = "<i>This should be in italics</i> but this ¶ character needs to be removed"; 
string sPattern = "[―&<>♫♪–‧₢₳-⅓⅟□¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶•¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕ×ØÙÚÛÜÝÞßàáãäåæçèéêëìíîïðñòóôö÷øùüýþÿŒœŠšŸŽžƒ˜-‰›¢€°]";
string replacePattern = "";
string text = System.Text.RegularExpressions.Regex.Replace(sampleText, sPattern, replacePattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase);

当我的程序执行时,我会得到这个:

iThis should be in italics/i but this character needs to be removed

那么,我是否可以匹配我的特殊字符,然后排除斜体标记?如果这不可能,我能想到的唯一解决方案是通过一些字符串处理删除斜体标记,然后用我的正则表达式验证结果,然后将斜体标记放回。

有什么想法吗?

正则表达式-匹配但排除

这里有一个简单的方法:

string sampleText = "<i>This should be in italics</i> but this ¶ character needs to be removed"; 
string sPattern = "(</?i>)|[―&<>♫♪–‧₢₳-⅓⅟□¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶•¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕ×ØÙÚÛÜÝÞßàáãäåæçèéêëìíîïðñòóôö÷øùüýþÿŒœŠšŸŽžƒ˜-‰›¢€°]";
string replacePattern = "$1";
string text = Regex.Replace(sampleText, sPattern, replacePattern, RegexOptions.IgnoreCase);
Console.WriteLine(text); 
// <i>This should be in italics</i> but this  character needs to be removed

但这只适用于<i></i>标签。您可以很容易地将其扩展到其他标签(例如,对于任何没有属性的简单标签,"(</?'w+>)|..."),但如果您变得比这复杂得多,我建议您首先将输入解析为XML,并仅将模式应用于您感兴趣的节点的文本。

您可以使用这个:

string sPattern = @"(?i)[^<>a-z0-9's'p{P}]+|<(?!/?i>)|(?<!</?i)>";
string replacePattern = "";

(您可以用要保留的标点符号替换''p{p})