为了账号安全,请及时绑定邮箱和手机立即绑定

Go 中跨越多行的正则表达式

Go 中跨越多行的正则表达式

Go
收到一只叮咚 2023-06-01 14:06:16
在 Go 中是否可以使用多行来打破复杂的正则表达式?创建更具可读性的代码会有很大帮助。例如在 Scala、Ruby、JavaScript 中可以使用x标志:x — Free-spacing and line comments (aka extended mode)它允许编写正则表达式,如:  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\.).*$`)
查看完整描述

2 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

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


拆分字符串:


pattern := `(,\s*|\s+)` +

    `(\(?s\.\s?s\.|` +

    `\(?s\.\s?l\.|` +

    `\(?s\.\s?str\.|` +

    `\(?s\.\s?lat\.).*$`

预解析字符串:


pattern := strings.Replace(`\s+

                 (\(?s\.\s?s\.|

                 \(?s\.\s?l\.|

                 \(?s\.\s?str\.|

                 \(?s\.\s?lat\.|

                sec\.|sec|near)\b.*$`,

        "\n                ", "", -1)

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


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


查看完整回答
反对 回复 2023-06-01
?
慕少森

TA贡献2019条经验 获得超9个赞

使用 + 布局看起来稍微好一点,至少拆分了正则表达式


var taxonConceptsRe2 = regexp.MustCompile(

    `(,\s*|\s+)(\(?s\.\s?s\.|` +

        `\(?s\.\s?l\.|` +

        `\(?s\.\s?str\.|` +

        `\(?s\.\s?lat\.).*$`)


查看完整回答
反对 回复 2023-06-01
  • 2 回答
  • 0 关注
  • 161 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信