C# 查找替换文本为';(';和';)';使用正则表达式的svg文件中的字符
我想用正则表达式替换SVG文件中的某些文本 例如,文件中可能有许多类似以下的属性:C# 查找替换文本为';(';和';)';使用正则表达式的svg文件中的字符,c#,regex,file,svg,C#,Regex,File,Svg,我想用正则表达式替换SVG文件中的某些文本 例如,文件中可能有许多类似以下的属性: <g clip-path="url(#clipId0)" fill="none" stroke="rgb(150,150,150)" stroke-opacity="0.14902" stroke-width="0.425" > <polyline points="17001.1,7859.91 17018.7,7859.91 17018.7,7901.08 17001.1,7901.08 17
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(150,150,150)" stroke-opacity="0.14902" stroke-width="0.425" >
<polyline points="17001.1,7859.91 17018.7,7859.91 17018.7,7901.08 17001.1,7901.08 17001.1,7859.91 " />
<polyline points="17018.7,7880.5 17001.1,7880.5 " />
<polyline points="17018.7,7883.44 17001.1,7883.44 " />
</g>
将来
请注意,每个实例的原始数值可能不同,但我想将它们全部更改为(100100)
我尝试了以下方法:
//Make SVG monochrome
string svgText = File.ReadAllText(svgPath);
Regex.Replace(svgText, "stroke=\"rgb(.*,.*,.*)\"", "stroke=\"rgb(100,100,100)\"");
File.WriteAllText(svgPath, svgText);
但当然,由于括号的缘故,它没有起作用。当我在parens“\(”和“\)”之前使用转义时,会出现红色的蠕动错误,指示无法识别的转义字符,但对于正则表达式,我应该转义括号字符,以便按字面理解它们,因为它们是正则表达式的特殊字符。对吗
我应该如何在这个字符串中使用正则表达式来实现我的目标?虽然我不是一名C#开发人员,但我仍然认为这适用于您的正则表达式字符串:
@"stroke=""rgb\(\d+,\d+,\d+\)"""
不要使用*
,因为它将匹配0个或更多(几乎)任何字符
\d
将匹配一个数字(通常仅为0-9,但也可以匹配某些正则表达式方言中的各种非阿拉伯数字。)
快乐编码 为什么要这样做,而不是使用已经存在的XML解析器呢?与正则表达式一样强大,内置的解析器将为您解决所有问题:)查看System.XML名称空间。我通常使用XmlDocument类。您可以使用XPath查询节点。您正在查找类似以下内容的内容:
svgText=Regex.Replace(svgText,@“stroke=”“rgb\(\d{1,3}、\d{1,3}、\d{1,3}\)“”、“stroke=\”rgb(100100100)\”代码>,但实际上-改用xml解析器。@EdwardBagby上面的正则表达式就是这样使用的<代码>\d{1,3}
表示“1-3位”。啊。。。文字。另一种选择。谢谢
//Make SVG monochrome
string svgText = File.ReadAllText(svgPath);
Regex.Replace(svgText, "stroke=\"rgb(.*,.*,.*)\"", "stroke=\"rgb(100,100,100)\"");
File.WriteAllText(svgPath, svgText);
@"stroke=""rgb\(\d+,\d+,\d+\)"""