Python 将 rgb(54, 162, 235) 字符串转成 rgba(54, 162, 235, 0.5)该怎么写正则匹配?

2019-04-09 16:27:15 +08:00
 coolair

忽略 rgb 的大小写,并把 alpha 添加进去, 而且,后面可能有多个空格。

感谢了,搞了一下午没搞出来。

2338 次点击
所在节点    问与答
21 条回复
1iuh
2019-04-09 16:32:48 +08:00
先吧 RGB 替换成 rgb,再把 rgb 替换为 rgba,再把 235 替换为 235,0.5 就可以了。 一定要用 python 搞么?
jiutai21
2019-04-09 16:35:04 +08:00
用邪道方法 evel,定义 rgb(r,g,b) 函数,然后执行
1iuh
2019-04-09 16:35:12 +08:00
总之拆分一下再去实现就简单了。
jiutai21
2019-04-09 16:36:19 +08:00
def rgb(r,g,b):
return 'rgba({},{},{},0.5)'.format(r,g,b)

src = 'rgb(54,162,235)'

a = eval(src)
print(a)
coolair
2019-04-09 16:36:56 +08:00
@1iuh 额,很麻烦啊,关键是想写成通用的,rgb 可能是 Rgb,235 也可能是别的数字。实在是不太会正则。
xmoiduts
2019-04-09 16:38:07 +08:00
搭车求问,长度为( 4*led 数量)的字符串,每个 led 用 4 字节存信息( rgbw ),可否使用正则或其他方法变成( grbw )?由于单片机性能十分有限,希望找到比 py 更快的方法。
coolair
2019-04-09 16:38:51 +08:00
@jiutai21 这样确实很邪啊,厉害!
misaka19000
2019-04-09 16:42:03 +08:00
replace(')', ', 0.5)') 这样不就可以了吗,要什么正则
1iuh
2019-04-09 16:45:09 +08:00
@coolair #5 你最好用 gist 贴一部分片段出来, 我试试帮你解决一下。
coolair
2019-04-09 16:45:53 +08:00
@jiutai21 不过这样的话,alpha 就没办法作为一个变量传进去啊。
cissoid
2019-04-09 16:47:31 +08:00
>>> re.sub(r'^rgb\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)$', r'rgba(\1,\2,\3,0.5)', 'rgb( 11, 22 , 33 )')
'rgba(11,22,33,0.5)'

对 RGB 值的范围没做 0 - 255 的强校验.
jiutai21
2019-04-09 16:53:11 +08:00
@coolair 难看点的实现,就是每次调用 evel 时,修改字符串 rgb(r,g,b),把最后的 ) 改为 ,alpha)
然后 rgb 函数改成 4 个参数
jiutai21
2019-04-09 17:02:20 +08:00
找到一个个人认为比较优雅的方法
def rgb(r, g, b):
return 'rgba({},{},{},{})'.format(r, g, b, alpha)


src = 'rgb(54,162,235)'
di = locals()
di['alpha']=0.5
a = eval(src, None,di)
print(a)
Mohanson
2019-04-09 17:04:21 +08:00
python PIL 模块的 Color 子模块有你想要的
Mohanson
2019-04-09 17:10:00 +08:00
名字错了,是 ImageColor.py
ETiV
2019-04-09 17:57:43 +08:00
思路是忽略大小写的匹配 rgb(括号里的全部内容)
替换为 rgba(括号里的全部内容, 0.5)

echo 'Rgb(54, 162, 235)' | sed -E 's;rgb\((.*)\);rgba(\1, 0.5);gi'

不会 Python
ETiV
2019-04-09 17:59:11 +08:00
sed -E 's;rgb\(([^)]+)\);rgba(\1, 0.5);gi'

rgb(排除掉)的全部内容)
ysc3839
2019-04-09 18:18:26 +08:00
先把字符串转成小写,再把 ')' 替换成 ', 0.5)'。
ysc3839
2019-04-09 18:19:03 +08:00
@ysc3839 忘了,还要把 'rgb' 替换成 'rgba'。
ryan18
2019-04-09 18:19:44 +08:00
既然用大蛇,为什么不去找轮子

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/553420

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX