我有一组样式,如下:
.CONSTANT {fill:#22FFCC}
.CONSTANT {fill:#0000FF}
.CONSTANT2 {fill:black}
.CONSTANT3 {fill:#98FF00}
我需要一个可以识别模式的正则表达式,以便我可以在str.replace('pattern', 'replacement')
中使用它。我的想法是,我知道常量是什么,它们是班级的指标,但我不知道班级的颜色究竟是什么,所以最好的方法是捕捉"上面给出的整行,或者更确切地说是某个名称CONSTANT
+ whitespace( )
+ {
+ whateverComesNextUntilTheClosingBrackets
+ }
以取代其他名称
想法是能够在SVG图像中进行颜色移动,无论颜色是什么,SVG图像不是实际图像,它是一个字符串,我可以通过它来替换所需的部分。
答案 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.