c# - 正则表达式 - 匹配但排除?

标签 c# regex

我有一个非常简单的任务,我试图在其中查找并替换字符串中的特殊字符。我的正则表达式正在运行,但有时字符串中有斜体标记,但我不想替换它们;我需要替换导致斜体标签变形的独立“<”和“>”字符。有没有办法匹配特殊字符但排除斜体模式?这是我的代码:

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,并且仅将模式应用于文本您感兴趣的节点。

关于c# - 正则表达式 - 匹配但排除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17707622/

相关文章:

c# - 在c#中用空字符替换空格

c# - MS-Chart 在 C# 中使用滚动条缩放 x 轴

java - 正则表达式匹配情绪

javascript - RegEx 错误地删除了 IE9 中的第一段

r - 删除 r 中逗号后的前 4 个字符

c# - 无法在来自 MongoDB 的 LINQ 查询中将字符串转换为 int

c# - 获取错误 : String reference not set to an instance of a String. 参数名称:s

c# - 什么事件表示基于 UserControl 的控件正在 WPF 中被销毁?

php preg_split 从方括号中拆分字符串到数组

python - 如何使用正则表达式来匹配文件中其他小写单词不连续重复的大写单词