使用通配符替换字符串

时间:2013-08-14 09:25:30

标签: c# regex replace

我有一段HTML代码,我想要删除一些样式部分,我知道我需要正则表达式,但我不知道如何生成正则表达式甚至如何在我的c#代码中应用它。以下是原始字符串的示例:

<p style="color: #000000; text-transform: none; letter-spacing: normal; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-size-adjust: none; font-stretch: normal; -webkit-text-stroke-width: 0px;">

以下是我希望在替换操作后获得的输出:

<p> 

我想摆脱style属性。我需要为<p ...>

的所有出现做这件事

关于这类工作有很多例子,但我对此感到困惑。所以解决方案的任何线索都会很棒。提前谢谢。

2 个答案:

答案 0 :(得分:3)

你真的找到一个正则表达式教程(example)来了解匹配是如何工作的,然后替换会更容易......

string output = Regex.Replace(input, @"(?<=<p)[^>]+", "");

请参阅demo

要仅删除样式属性,您可以使用它:

string output = Regex.Replace(input, @"(?<=<p)\s*style=""[^""]+""", "");

请注意,如果style属性紧跟在<p之后(具有任意数量的空格),则此方法无效。

Updated demo


要删除html中任何位置的属性样式,您可以使用(比前一个更安全):

string output = Regex.Replace(input, @"(?<=<p)([^>]*?)\s*style=""[^"">]+""", "$1");

Reupdated demo

答案 1 :(得分:0)

不确定如何在c#中执行此操作,但在bash正则表达式中使用一般示例,我会这样做:

echo "$pattern" | sed -r 's/(<p).*(>)/\1\2/'

其中:

(<p) ----- Captures the opening bracket with p
.*   ----- Anything inbetween up to the next ">"
()   ----- Captures the closing bracket
\1\2 ----- Gives you back the two captured things, 
           in this order, with no space inbetween

希望它有所帮助,但同样,你需要自己寻找替换c#。