python - 替换字符串中的子字符串

标签 python regex optimization replace

我的函数在字符串 hex 符号(十六进制 CSS 颜色)中找到并替换为短符号。
例如:#000000可以表示为#000

import re

def to_short_hex (string):
    match = re.findall(r'#[\w\d]{6}\b', string)

    for i in match:
        if not re.findall(r'#' + i[1] + '{6}', i):
            match.pop(match.index(i))

    for i in match:
        string = string.replace(i, i[:-3])

    return string;

to_short_hex('text #FFFFFF text #000000 #08088')

出局:

text #FFF text #000 #08088

有什么方法可以使用 list comprehension 等来优化我的代码吗?

最佳答案

这个怎么样?您可以通过将 is6hexdigit 嵌入 to_short_hex 来加快它的速度,但我希望它更具可读性。

hexdigits = "0123456789abcdef"

def is6hexdigit(sub):
    l = sub.lower()
    return (l[0] in hexdigits) and (l.count(l[0]) == 6)

def to_short_hex(may_have_hexes):
    replaced = ((sub[3:] if is6hexdigit(sub[:6]) else sub)
                        for sub in may_have_hexes.split('#'))
    return '#'.join(replaced)

关于python - 替换字符串中的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9240882/

相关文章:

python - 研究音调发生器程序。 'duration' 变量(以秒为单位)不能正确确定音调播放的时间

javascript - 编写一个遍历二叉树的迭代器

javascript 无效的正则表达式 : Unmatched ')'

c++ - 为什么 ofstream::rdbuf() 总是空的?

python - Scrapy,限制 start_url

c# - C#中用于文件名验证的正则表达式

regex - Hive:基于反斜杠的字符串拆分\

delphi - 如何使用纯 GDI 对 Canvas 区域进行颜色混合(按指定的 alpha 值着色)?

c++ - while(1) 对比。 for (;;) 有速度差异吗?

python - 通过用新方法替换模型类的实例方法来模拟它