如何正则表达式搜索此模式

时间:2016-12-15 15:12:06

标签: regex svg replace

我有一组样式,如下:

.CONSTANT {fill:#22FFCC}
.CONSTANT {fill:#0000FF}
.CONSTANT2 {fill:black}
.CONSTANT3 {fill:#98FF00}

我需要一个可以识别模式的正则表达式,以便我可以在str.replace('pattern', 'replacement')中使用它。我的想法是,我知道常量是什么,它们是班级的指标,但我不知道班级的颜色究竟是什么,所以最好的方法是捕捉"上面给出的整行,或者更确切地说是某个名称CONSTANT + whitespace( ) + { + whateverComesNextUntilTheClosingBrackets + }以取代其他名称

想法是能够在SVG图像中进行颜色移动,无论颜色是什么,SVG图像不是实际图像,它是一个字符串,我可以通过它来替换所需的部分。

3 个答案:

答案 0 :(得分:2)

您的陈述:

  

whitespace()+ {+ whateverComesNextUntilTheClosingBrackets +}

你可以使用这样的正则表达式:

\.CONSTANT \{.*?\}

<强> Working dmeo

答案 1 :(得分:1)

.CONSTANT \ d * \ S * {填充:(#[0-9A-F] {6} | [A-Z] {4,})}

使用您提供的示例,这应该可以解决问题。

\.  ->  for starting with a dot(needed to add \ to take . as text not as regex)
CONSTANT  ->  to match string exactly as it is
\d*   ->  may or may not have digits
\s*   ->  may or may not have spaces here
{fill:  ->  match exactly as it is

现在使用方括号()创建一个新组来限制&#39; OR&#39;条件使用&#39; |&#39;。没有这些括号,它将在&#39; |&#39;之前使用整个字符串。 ie之后的一个vs字符串。 (.CONSTANT \ d * \ s * {fill:(#[0-9A-F] {6})或([a-z] {4,}}})。但是我们需要(#[0-9A-F] {6})OR([a-z] {4,})

#   -> match exactly.
[0-9A-F]{6} -> to match hex values for color containing digits and letter from A-F with length exactly 6.

[a-z]{4,}   -> to match color names with length **at least** of 4 like blue

这将涵盖#hex_code_color或颜色名称和黑色)

答案 2 :(得分:0)

要仅替换您可以使用反向引用的颜色,这样您就不必替换整个字符串。 此正则表达式(^\.[^ ]+ *{ *fill: *)([^}]+)允许将字符串替换为'$1yournewcolor'Here is a working demo.