登录
首页 >  Golang >  Go问答

在 Go 中处理跨行正则表达式

来源:stackoverflow

时间:2024-03-16 11:03:29 191浏览 收藏

在 Go 语言中,多行正则表达式可以显著提升复杂正则表达式的可读性。类似于 Scala、Ruby 和 JavaScript 中的 x 标志,Go 提供了多种选择来增强正则表达式的可读性,包括字符串分割、预解析字符串,以及使用 + 进行布局。这些方法可以有效地拆分正则表达式,提高其可维护性和理解度。

问题内容

go 中是否可以使用多行来破坏复杂的正则表达式?创建更具可读性的代码将有很大帮助。

例如,在 scala、ruby、javascript 中,可以使用 x 标志:

x — 自由间距和行注释(又名扩展模式)

它允许编写正则表达式,例如:

taxon_concepts2 = /\s+
                     (\(?s\.\s?s\.|
                     \(?s\.\s?l\.|
                     \(?s\.\s?str\.|
                     \(?s\.\s?lat\.|
                    sec\.|sec|near)\b.*$/x

我想在 go 中实现类似的代码,而不是:

var taxonConceptsRe2 = regexp.MustCompile(`(,\s*|\s+)(\(?s\.\s?s\.|\(?s\.\s?l\.|\(?s\.\s?str\.|\(?s\.\s?lat\.).*$`)

解决方案


您有几个选项可以提高像这样的正则表达式的可读性。

  1. 分割字符串:

    pattern := `(,\s*|\s+)` +
        `(\(?s\.\s?s\.|` +
        `\(?s\.\s?l\.|` +
        `\(?s\.\s?str\.|` +
        `\(?s\.\s?lat\.).*$`
  2. 预解析字符串:

    pattern := strings.replace(`\s+
                     (\(?s\.\s?s\.|
                     \(?s\.\s?l\.|
                     \(?s\.\s?str\.|
                     \(?s\.\s?lat\.|
                    sec\.|sec|near)\b.*$`,
            "\n                ", "", -1)

    如果您选择这种方法,您可能需要构建一个函数来为您执行此操作,并且更加健壮。

  3. 不要使用正则表达式。 (显然并不总是理想的,但正则表达式经常被过度使用,所以如果有意义的话就这样做。)

使用 + 进行布局看起来稍微好一些,并且至少拆分了正则表达式

var taxonConceptsRe2 = regexp.MustCompile(
    `(,\s*|\s+)(\(?s\.\s?s\.|` +
        `\(?s\.\s?l\.|` +
        `\(?s\.\s?str\.|` +
        `\(?s\.\s?lat\.).*$`)

终于介绍完啦!小伙伴们,这篇关于《在 Go 中处理跨行正则表达式》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>