2013-09-24 46 views
0

我试图替换2个随机更改的字符。随机更改数据的字符串替换

例如:我想从{font-family: 'Arial'}随机更换字体系列身体{font-family: 'verdena'}。但是,每次我更换一个字体系列时,我都无法找出哪个系列类型要随机更换。

请帮我找到替换两个字符串之间的随机字符串的解决方案。

//Generate Random Font 
var FontNames = new List<string> { "Georgia", "Serif", "verdana", "arial", "calibri" }; 
Random randonGenf = new Random(); 
int index = randonGenf.Next(FontNames.Count); 
var FontName = FontNames[index]; 
FontNames.RemoveAt(index); 

var fileFontContents = System.IO.File.ReadAllText(@"C:\SchoolSite\default.css"); 
fileContents = fileFontContents.Replace("body {font-family: 'Arial'}", "body {font-family: '" + FontName + "'}"); 
+0

如何而不是改变分配给元素的样式,你只需要给元素分配一个随机类?那么你不必做奇怪的字符串替换。 –

+0

你试图解决的实际问题是什么?用正则表达式替换C#中的CSS似乎有点奇怪。 – siride

回答

5

您需要为此使用regular expression。例如:

fileContents = Regex.Replace(
    fileFontContents, 
    @"body \{font-family: '[^']+'\}", 
    "body {font-family: '" + FontName + "'}"); 

如果你想这样做,不带引号,这将是:

fileContents = Regex.Replace(
    fileFontContents, 
    @"body \{font-family: [^\}]+\}", 
    "body {font-family: " + FontName + "}"); 

简而言之,该'[^']+'说,“匹配一个单引号,那么任何字符序列这不是一个单引号,最后是另一个单引号。因此,匹配'anything'

在非引号的情况下,我使用右大括号作为分隔符,即[^}]+\}表示:“匹配任何字符序列那不是大括号,a nd跟着它与一个右大括号。“

请注意,这些正则表达式是快速和肮脏。他们期望有效的输入,并且如果输入格式不正确,将会出人意料地失败。

+0

谢谢....像魅力 – Kurkula

+0

吉姆,我可以处理这个正则表达式,如果我们必须显示没有单引号? 我尝试这样的方式,它因此未工作 fileContents = Regex.Replace( fileFontContents, @ “身体\ {字体家庭:[^'] + \}”, “身体{字体家庭:” + FontName +“}”); – Kurkula

+0

@“body \ {font-family:[^}] +}”这将导致error []未终止的集合。你能否用单引号检查你的更新答案。 – Kurkula

相关问题