如何使用正则表达式替换包含圆括号(括号)的文本?

3
oldvalue = "RGB = (255,000,255,000)"
newvalue = "RGB = (255,255,000,000)"
File.WriteAllText("C:\\Users\\devdrone\\Desktop\\Abc.txt", 
                    Regex.Replace(File.ReadAllText("C:\\Users\\devdrone\\Desktop\\Abc.txt"), 
                                    oldvalue, 
                                    newvalue));

这并没有被新的值所替换。

但是它与以下情况一起使用时有效:

oldvalue = "RGB 1"
newvalue = "RGB 0"

你确定在 Abc.txt 中有 RGB = (255,000,255,000) 的完全匹配吗? - Anton Gogolev
3
正则表达式中的括号具有特殊含义,如果不注意可能会导致混淆。 - BugFinder
@Anton 是的,在 ABC.txt 中有一个 RGB = (255,000,255,000) 的完全匹配。 - Dev Drone Bhowmik
3个回答

4

由于您想替换的字符串是一个行字符串,所以不要使用Regex.Replace而应该使用String.Replace:

string oldvalue = "RGB = (255,000,255,000)";
string newvalue = "RGB = (255,255,000,000)";
File.WriteAllText("C:\\Users\\devdrone\\Desktop\\Abc.txt", 
            File.ReadAllText("C:\\Users\\devdrone\\Desktop\\Abc.txt").Replace( 
                            oldvalue, 
                            newvalue));

什么是行字符串? - Dev Drone Bhowmik
@DevDroneBhowmik 嗯,我的意思是你想要查找的字符串不需要使用正则表达式来找到。 - Thomas Ayoub
那么我什么时候应该使用正则表达式呢? - Dev Drone Bhowmik
1
@DevDroneBhowmik 当你有复杂的模式时,应该使用正则表达式。在这里,如果你想要找到 RGB = (255,000,255,000),那么只需要搜索它即可。如果你想要找到所有的 RGB 颜色,你可以使用类似 RGB = \((?:(?:\d{1,3},?){4})\) 的正则表达式。 - Thomas Ayoub

0

由于oldvalue包含在正则表达式中具有特殊含义的字符,例如(),因此您应该使用\字符进行转义。

oldvalue = "RGB = \\(255,000,255,000\\)"
//or oldvalue = @"RGB = \(255,000,255,000\)"
newvalue = "RGB = (255,255,000,000)"
File.WriteAllText("C:\\Users\\devdrone\\Desktop\\Abc.txt", 
                    Regex.Replace(File.ReadAllText("C:\\Users\\devdrone\\Desktop\\Abc.txt"), 
                                    oldvalue, 
                                    newvalue));

0
请尝试类似以下的代码:
regexp = "(.*)\((.*)\)(.*)"
newvalue = "RGB = (255,255,000,000)"
File.WriteAllText("C:\\Users\\devdrone\\Desktop\\Abc.txt",      
    Regex.Replace(File.ReadAllText("C:\\Users\\devdrone\\Desktop\\Abc.txt"), 
                                    regexp, 
                                    newvalue));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接