我有一个非常简单的任务,我试图找到并替换字符串中的特殊字符。我的正则表达式正在工作,但有时在字符串中有斜体标签,但我不想替换它;我需要更换独立的“<”和“>”导致斜体标签变形的字符。有没有办法让我匹配特殊字符但排除斜体模式?这是我的代码:
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
那么我可以匹配我的特殊字符,然后排除斜体标签吗?如果这是不可能的,我能想到的唯一解决方案是使用一些字符串处理删除斜体标签,然后用我的正则表达式验证结果,然后将斜体标签重新放入..
有什么想法吗?
答案 0 :(得分:4)
这是一个简单的方法:
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,并且仅将模式应用于您感兴趣的节点的文本。
答案 1 :(得分:0)
您可以使用:
string sPattern = @"(?i)[^<>a-z0-9\s\p{P}]+|<(?!/?i>)|(?<!</?i)>";
string replacePattern = "";
(您可以用要保留的标点符号替换\ p {P})