iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >Go中如何正确处理带有转义的字符串?
  • 734
分享到

Go中如何正确处理带有转义的字符串?

2024-02-05 22:02:00 734人浏览 薄情痞子
摘要

问题内容 我正在创建一个程序,该程序正在处理和计算开源存储库和库的大小,并将数据保存到数据库中以供进一步分析。 我有一个输入字符串:GitHub.com/Azure/Go-ansit

问题内容

我正在创建一个程序,该程序正在处理和计算开源存储库和库的大小,并将数据保存到数据库中以供进一步分析。

  • 我有一个输入字符串GitHub.com/Azure/Go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1
  • 解析为格式:github.com/\!azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1
  • 然后我将其解析为 /home/username/dev/glass/tmp/pkg/mod/github.com/\!azure/[email protected] 格式,这是我的文件系统中的有效路径,我在其中已下载该特定的 go 库。
  • 之后,我将该路径传递给 gocloc -程序 (https://github.com/hhatto/gocloc)
  • 并解析结果。

但问题是,当我将字符串 /home/username/dev/glass/tmp/pkg/mod/github.com/\!azure/[email protected] 保存到变量中时,go 实际上添加了对我保存的字符串的另一个转义,因此它实际上是内存中的 /home/username/dev/glass/tmp/pkg/mod/github.com/\\!azure/[email protected] 。 (fmt.println - 例如删除它)

问题是,当我将该字符串作为参数传递给 os/exec(运行 gocloc 和该路径字符串)时,它运行带有两个转义符的命令 - 这不是有效的路径。

有什么办法可以解决这个问题吗?对我来说,一个想法是只创建一个关于我想做的事情的 shell 脚本

此函数将 github.com/azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 解析为 github.com/\!azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a 格式1 - 及之后这被保存到一个变量中,并且该变量比它应该有的多了一次转义。

func parseurltovendordownloadfORMat(input string) string {
    // split the input string on the first space character
    parts := strings.splitn(input, " ", 2)
    if len(parts) != 2 {
        return ""
    }

    // split the package name on the '/' character
    packagenameparts := strings.split(parts[0], "/")

    // add the '\!' prefix and lowercase each part of the package name
    for i, part := range packagenameparts {
        if hasuppercase(part) {
            packagenameparts[i] = "\\!" + strings.tolower(part)
        }
    }

    // join the modified package name parts with '/' characters
    packagename := strings.join(packagenameparts, "/")

    return strings.replaceall(packagename+"@"+parts[1], `\\!`, `\!`)
}

之后,字符串被解析为以下格式:/home/username/dev/glass/tmp/pkg/mod/github.com/\!azure/[email protected]

传递给此函数:

// alternative gocloc - command.
func linesofcode(dir string) (int, error) {
    // run the `gocloc` command in the specified directory and get the output
    cmd := exec.command("gocloc", dir)
    output, err := cmd.output()
    if err != nil {
        return 0, err
    }

    lines, err := parsetotallines(string(output))
    if err != nil {
        return 0, err
    }

    return lines, nil
}

它使用这个解析函数:

// Parse from the GoCloc response.
func parseTotalLines(input string) (int, error) {
    // Split the input string into lines
    lines := strings.Split(input, "\n")

    // Find the line containing the "TOTAL" row
    var totalLine string
    for _, line := range lines {
        if strings.Contains(line, "TOTAL") {
            totalLine = line
            break
        }
    }

    // If the "TOTAL" line was not found, return an error
    if totalLine == "" {
        return 0, fmt.Errorf("could not find TOTAL line in input")
    }

    // Split the "TOTAL" line into fields
    fields := strings.Fields(totalLine)

    // If the "TOTAL" line doesn't have enough fields, return an error
    if len(fields) < 4 {
        return 0, fmt.Errorf("invalid TOTAL line: not enough fields")
    }

    // Get the fourth field (the code column)
    codeStr := fields[3]

    // Remove any commas from the code column
    codeStr = strings.Replace(codeStr, ",", "", -1)

    // Parse the code column as an integer
    code, err := strconv.Atoi(codeStr)
    if err != nil {
        return 0, err
    }

    return code, nil
}

我尝试过的:

  • 使用 gocloc 作为库,但无法正常工作。
  • 使用单引号而不是转义符,没有让它工作,但我认为可能有一些东西。

解决这个问题的一种方法可能是创建单独的 shell 脚本并将目录作为参数传递给该脚本,并消除那里的转义,我不知道......

如果您想观察所有源代码:Https://github.com/haapjari/glass,更具体地说,是文件 https://github.com/haapjari/glass/blob/main/pkg/plugins /goplg/plugin.go 和函数 enrichwithlibrarydata() 和 utils 函数,位于:https://github.com/haapjari/glass/blob/main/pkg/plugins/goplg/utils.go (上面的示例)

有什么想法吗?如何进行?提前致谢!


正确答案


我有一个输入字符串:github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1

解析为格式:github.com/\!azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1

您的解析器似乎有错误。我希望 Azure 成为 !azure:

github.com/!azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1

Go 模块参考

为了避免在不区分大小写的文件系统中提供服务时出现歧义,$module 和 $version 元素进行大小写编码,方法是将每个大写字母替换为感叹号,后跟相应的小写字母。这允许模块 example.com/mexample.com/m 都存储在磁盘上,因为前者被编码为 example.com/!m

以上就是Go中如何正确处理带有转义的字符串?的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: Go中如何正确处理带有转义的字符串?

本文链接: https://www.lsjlt.com/news/561091.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Go中如何正确处理带有转义的字符串?
    问题内容 我正在创建一个程序,该程序正在处理和计算开源存储库和库的大小,并将数据保存到数据库中以供进一步分析。 我有一个输入字符串:github.com/azure/go-ansit...
    99+
    2024-02-05
  • 无法正确读取包含转义符的选项字符串
    来到编程网的大家,相信都是编程学习爱好者,希望在这里学习Golang相关编程知识。下面本篇文章就来带大家聊聊《无法正确读取包含转义符的选项字符串》,介绍一下,希望对大家的知识积累有所帮助,助力实战开...
    99+
    2024-04-04
  • 如何在golang中将结构打印为带有转义字符的纯字符串?
    在Golang中,将结构体打印为带有转义字符的纯字符串是一种常见的需求。这可以通过使用fmt包中的Sprint函数来实现。Sprint函数将结构体转换为字符串,并自动对其中的特殊字符进...
    99+
    2024-02-09
  • java中字符串如何去掉转义字符
    第一步:添加依赖   org.apache.commons commons-text 1.1 第二步:利用工具类进行处理 处理代码: String str = "{\\\"name\\\":\\\"xiaoxu\\\"...
    99+
    2023-08-31
    java mybatis 开发语言
  • Python如何处理带有 \u 的字符串操作
    这篇文章主要介绍“Python如何处理带有 \u 的字符串操作”,在日常操作中,相信很多人在Python如何处理带有 \u 的字符串操作问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python如何处理带有 ...
    99+
    2023-06-14
  • PHP正则表达式之如何分割字符串与转义字符串
    这篇文章主要介绍“PHP正则表达式之如何分割字符串与转义字符串”,在日常操作中,相信很多人在PHP正则表达式之如何分割字符串与转义字符串问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP正则表达式之如何分割...
    99+
    2023-06-25
  • 选择正确编码:Go语言处理中文字符
    Go语言作为一种强大的编程语言,提供了丰富的功能和库来处理中文字符。在Go语言中处理中文字符需要正确处理字符编码,避免出现乱码和错误的情况。下面将介绍如何在Go语言中处理中文字符,并提...
    99+
    2024-04-02
  • PHP如何反转义一个转义的字符串
    这篇文章将为大家详细讲解有关PHP如何反转义一个转义的字符串,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。PHP 反转义转义字符串 在 PHP 中,转义字符用于表示特殊字符或控制字符。例如," " 表示换...
    99+
    2024-04-02
  • PHP中的preg_quote()函数:如何将字符串中的特殊字符转义为正则表达式字符
    PHP中的preg_quote()函数:如何将字符串中的特殊字符转义为正则表达式字符,需要具体代码示例在开发中,我们经常会使用到正则表达式来匹配和处理字符串。然而,有些字符串中可能含有一些特殊字符,比如正则表达式中的元字符,它们具有特殊的意...
    99+
    2023-11-04
    字符串 转义 preg_quote
  • 一文带你了解如何正确使用Java中的字符串常量池
    目录前言理解字符串常量池两种创建字符串方式字符串拼接方式妙用String.intern() 方法字符串常量池有多大字符串常量池的优缺点总结前言 研究表明,Java堆中对象占据最大比重...
    99+
    2022-12-26
    Java字符串常量池使用 Java字符串常量池
  • Python 处理带有 \u 的字符串操作
    最近遇到一个头疼的问题,用socket接收到一个字符串 格式如下: {“trade_status”: {“desc”: “\u30106\u3011 - \u8d22\u52a1\...
    99+
    2024-04-02
  • python处理html中的转义字符
           最近在用python处理网页数据时,经常遇到一些html转义字符(也叫html字符实体),例如<> 等。字符实体一般是为了表示网页中的预留字符,比如>用>表示,防止被浏览器认为是标签,具体参考w3sc...
    99+
    2023-01-31
    字符 python html
  • PHP如何正确处理中文字符长度计算
    标题:PHP如何正确处理中文字符长度计算 在Web开发中,处理中文字符长度计算是一项常见的技术任务。特别是在PHP开发中,由于中文字符和英文字符在字节数上的不同,很容易出现字符长度计算...
    99+
    2024-04-02
  • Go 语言中的字符串处理与正则表达式
    Go语言中的字符串处理和正则表达式可以使用内置的标准库`strings`和`regexp`来实现。字符串处理:1. 判断字符串是否包...
    99+
    2023-10-12
    Go语言
  • python中的字符转运算符、字符串处理方式
    目录字符转运算符、字符串处理默认用法:去除空格字符串支持的运算符及使用python中字符串支持哪些运算符呢?使用方法举例字符转运算符、字符串处理 def CalSingleVals(...
    99+
    2024-04-02
  • 如何在go-echo中避免“+”字符的转义
    今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《如何在go-echo中避免“+”字符的转义》,主要内容是讲解等等,感兴趣的朋友可以收藏或者有更好的建议在评论提出,...
    99+
    2024-04-04
  • oracle中转义字符串的方法有哪些
    在Oracle中,可以使用以下方法来转义字符串:1. 使用单引号转义:如果字符串中包含单引号,可以使用两个连续的单引号来表示一个单引...
    99+
    2023-08-31
    oracle
  • JavaScript如何反转字符串中的字符
    这篇文章将为大家详细讲解有关JavaScript如何反转字符串中的字符,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。如何反转字符串中的字符反转字符串中的字符是很容易的。只需组合扩展操作符(...)、Arr...
    99+
    2023-06-27
  • JavaScript中如何对字符串进行反转义
    本文小编为大家详细介绍“JavaScript中如何对字符串进行反转义”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaScript中如何对字符串进行反转义”文章能帮助大家解决疑惑,下面跟着小编的思路慢...
    99+
    2024-04-02
  • 详解php如何正确计算中文字符串的长度
    在PHP编程中,我们常常遇到需要计算字符串长度的场景。一般情况下,我们习惯用 strlen() 函数或 mb_strlen() 函数来计算字符串长度。然而,在处理中文字符串时,我们会发现使用 strlen() 函数会出现问题,因为中文字符不...
    99+
    2023-05-14
    php字符串 php
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作