在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\.).*$`)
答案 0 :(得分:2)
使用+布局看起来略好一些,至少可以拆分正则表达式
var taxonConceptsRe2 = regexp.MustCompile(
`(,\s*|\s+)(\(?s\.\s?s\.|` +
`\(?s\.\s?l\.|` +
`\(?s\.\s?str\.|` +
`\(?s\.\s?lat\.).*$`)
答案 1 :(得分: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)
如果选择这种方法,则可能需要构建一个函数来为您执行此操作,并且要更加健壮。
不要使用正则表达式。 (显然,它并不总是理想的,但是正则表达式经常被过度使用,因此请在合理的情况下使用它。)