Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正则表达式-匹配但排除?_C#_Regex - Fatal编程技术网

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

C# 正则表达式-匹配但排除?,c#,regex,C#,Regex,我有一个非常简单的任务,我正在尝试查找和替换字符串中的特殊字符。我的正则表达式正在工作,但有时字符串中有斜体标记,我不想替换;我需要替换导致斜体标记变形的独立“”字符。有没有办法让我匹配特殊字符,但不包括斜体图案?这是我的密码: string sampleText = "<i>This should be in italics</i> but this ¶ character needs to be removed"; string sPattern = "[―&

我有一个非常简单的任务,我正在尝试查找和替换字符串中的特殊字符。我的正则表达式正在工作,但有时字符串中有斜体标记,我不想替换;我需要替换导致斜体标记变形的独立“”字符。有没有办法让我匹配特殊字符,但不包括斜体图案?这是我的密码:

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

有什么想法吗?

这里有一个简单的方法:

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
string sampleText=“该字符应为斜体,但该字符需要删除”;
字符串SPATERN=“()|[―&♫♪–‧₢₳-⅓⅟□¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶•¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕ×ØÙÚÛÜÝÞßàáãäåæçèéêëìíîïðñòóôö÷øùüýþÿŒœŠšŸŽžƒ˜-‰›¢€°]";
字符串replacePattern=“$1”;
string text=Regex.Replace(sampleText、sPattern、replacePattern、RegexOptions.IgnoreCase);
控制台写入线(文本);
//这应该是斜体,但这个字符需要删除
但这只适用于
标记。您可以很容易地将其扩展到其他标记(例如,对于任何没有属性的简单标记,
“()|…”“
),但如果您变得更复杂,我建议您首先将输入解析为XML,并且仅将模式应用于您感兴趣的节点的文本。

您可以使用以下方法:

string sPattern = @"(?i)[^<>a-z0-9\s\p{P}]+|<(?!/?i>)|(?<!</?i)>";
string replacePattern = "";
string sPattern=@“(?i)[^a-z0-9\s\p{p}]+)|(?”;
字符串替换模式=”;

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

看起来匹配要保留的内容比匹配要删除的内容要容易得多。
string sPattern = @"(?i)[^<>a-z0-9\s\p{P}]+|<(?!/?i>)|(?<!</?i)>";
string replacePattern = "";