繁体   English   中英

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

[英]Regular Expression - Match But Exclude?

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

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})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM