0

我发现我的 go 项目中的正则表达式替换非常慢,使用 regexp.ReplaceAllLiteralString (re2) 将 \s+ 替换为单个空格。

它显然是为了折叠 SVG 中的空白而放置的,无论这是否是个好主意,当更改为“{2,}”时,操作是十分之一的时间。

虽然使用 \s 与 ' ' 是一个相当大的区别 - 但这是有道理的,它是比较的 5 倍。但是为什么当使用单个空格和 + 时,它比使用 {2,} 慢 9 倍?

4

1 回答 1

0

X+表示“出现一次或多次的 X 的每个实例”,这意味着它等价于{1,}. 您正在替换(一个空白)以及     使用\s+.

对于 SVG 文档或任何 XML 文档,使用\s+肯定会很慢。以下文档需要 5 次替换,忽略换行符序列:

<?xml version="1.0" encoding="utf-8"?>
<element attr1="value" attr2="value" attr3="value"/>

现在想象一个复杂得多的 SVG 文档,这样的东西\s{2,}\s+(aka \s{1,}) 快得多是合理的!如果您使用\s{2,}!

于 2017-05-29T01:54:06.703 回答