【问题标题】:Parse output and fetch hex colors [closed]解析输出并获取十六进制颜色
【发布时间】:2018-06-18 07:48:16
【问题描述】:

我有一个 ImageMagick 命令的输出来计算图像直方图的前几个条目,即:

416327: ( 61, 65, 39) #3D4127 srgb(61,65,39)
212997: (130,127, 83) #827F53 srgb(130,127,83)
428312: (167,161, 99) #A7A163 srgb(167,161,99)
481351: (198,187,116) #C6BB74 srgb(198,187,116)
381013: (214,200,148) #D6C894 srgb(214,200,148)

它代表图像中最主要的颜色,现在我想“提取”这些颜色并将它们存储在一个结构中,这样我就可以在其余的 Go 代码中使用它们。现在我正在为如何做到这一点而苦苦挣扎?

首先,我虽然关于使用fmt.Sscanf,但我只想提取两个字段,第一个和#XXXXXX。你能指出我正确的方向吗?

例如,第一行应该导致

416327 #3D4127

【问题讨论】:

  • 请展示您当前的尝试,并描述您遇到的问题。
  • ^(\d{6})[^#]*(#[A-F0-9]{6}).*$ ... 然后使用第一个和第二个捕获组。
  • 在 Imagemagick 中,将输出通过管道传输到 sed,您可以这样做:convert image -format "%c" histogram:info: | while read line; do echo $line | sed -n 's/^\(.*\):.*\(#.*\) .*$/\1 \2\n/p'; done 由于这是暂停,我无法通过示例给出正确答案。
  • 这个问题对我来说似乎很简单。它有两个部分。首先是如何从数据列表中提取这两个字段。我已经在上面回答了。第二个是将结果放入某种结构中。我无法回答,因为我不知道是什么样的结构。将其放入数组很容易。 array=$(convert image -format "%c" histogram:info: | while read line; do echo $line | sed -n 's/^\(.*\):.*\(#.*\) .*$/\1 \2\n/p'; done) 但这可能不是 OP 想要的。

标签: regex string go


【解决方案1】:

你可以试试这个:

^(\d{6})[^#]+(#\S+)

Where group 1 contains first 6 digit
and group 2 contains the hash value

Regex101 Demo

根据 OP 的评论更新:

^(\d+)[^#]+(#\S+)

^(\d{6,100})[^#]+(#\S+)

如果起始数字不限于 6 位,则将 \d{6} 替换为 \d+(表示一位或多位数字),或者如果您知道范围,那么您可以这样做:\d{min,max} 例如\d{6,100}

样本来源 (run here):

func main() {
    var re = regexp.MustCompile(`(?m)^(\d{6})[^#]+(#\S+)`)
    var str = `416327: ( 61, 65, 39) #3D4127 srgb(61,65,39)
212997: (130,127, 83) #827F53 srgb(130,127,83)
428312: (167,161, 99) #A7A163 srgb(167,161,99)
481351: (198,187,116) #C6BB74 srgb(198,187,116)
381013: (214,200,148) #D6C894 srgb(214,200,148)

`
segs2 := re.FindAllStringSubmatch(str, -1)
for i := 0; i < len(segs2); i++ {
    fmt.Println(segs2[i][1], "," ,segs2[i][2]);
}

【讨论】:

  • 这里的问题是直方图计数不限于6个字符。计数的数量取决于图像的大小以及使用该颜色的频率。
  • 根据您的评论稍微更新了答案,让我知道这是否适合您...如果是这样,那么您也可以接受答案
  • 那是我的评论,但我不是 OP。但这确实解决了我提到的比我的 sed 命令更优雅的正则表达式的问题。
猜你喜欢
  • 2012-11-04
  • 1970-01-01
  • 2011-10-25
  • 2020-03-05
  • 1970-01-01
  • 2020-03-05
  • 2015-04-12
  • 2012-12-06
  • 2019-06-16
相关资源
最近更新 更多