Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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# 查找替换文本为';(';和';)';使用正则表达式的svg文件中的字符_C#_Regex_File_Svg - Fatal编程技术网

C# 查找替换文本为';(';和';)';使用正则表达式的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

我想用正则表达式替换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 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+\)"""