猿问

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

在 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\.).*$`)



收到一只叮咚
浏览 162回答 2
2回答

守着星空守着你

您有几个选项可以提高像这样的正则表达式的可读性。拆分字符串: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)如果您选择这种方法,您可能希望构建一个函数来为您执行此操作,并且更加健壮。不要使用正则表达式。(显然并不总是理想的,但正则表达式经常被过度使用,所以如果有意义的话就这样做吧。)

慕少森

使用 + 布局看起来稍微好一点,至少拆分了正则表达式var taxonConceptsRe2 = regexp.MustCompile(    `(,\s*|\s+)(\(?s\.\s?s\.|` +        `\(?s\.\s?l\.|` +        `\(?s\.\s?str\.|` +        `\(?s\.\s?lat\.).*$`)
随时随地看视频慕课网APP

相关分类

Go
我要回答