我正在尝试在SublimeText2中开发一个快速黑客(不太理想,我知道):
我的标记中有这个(常用)代码:
{% url '
someURL ' %}
如何使用正则表达式删除换行符,以便{% url 'someURL '%}
我成功地在括号之间选择了一些东西:
\{\%[\s\S]*?\%\}
但是,我无法弄清楚如何仅选择换行符\n
并在其中加倍空格。
答案 0 :(得分:3)
使用以下正则表达式,然后用一个空格替换匹配。
(?s)\s+(?=(?:(?!%}|\{%).)*%\})
<强>解释强>
(?s) set flags for this block (with . matching
\n) (case-sensitive) (with ^ and $
matching normally) (matching whitespace
and # normally)
\s+ whitespace (\n, \r, \t, \f, and " ") (1 or
more times)
(?= look ahead to see if there is:
(?: group, but do not capture (0 or more
times):
(?! look ahead to see if there is not:
%} '%}'
| OR
\{ '{'
% '%'
) end of look-ahead
. any character
)* end of grouping
% '%'
\} '}'
) end of look-ahead
答案 1 :(得分:1)
您可以使用此模式:
(?:\G(?!\A)|\{%)[^%\r\n]*\K(?:\r?\n)+(?=[^%]*%\})
替换是一个空字符串。
此模式可确保您始终使用与上一场比赛结束时的位置匹配的{%
锚定位于%}
和\G
之间。
\K
从匹配结果中删除左侧匹配的所有内容。所以只删除了CRLF或LF。
如果要在标记之间允许%
个字符,可以改进此模式:
(?:\G(?!\A)|\{%)(?:[^%\r\n]|%(?!\}))*\K(?:\r?\n)+(?=(?:[^%]|%(?!\}))*%\})
或更高效(如果可以使用sublimetext):
(?:\G(?!\A)|\{%)(?>[^%\r\n]+|%+(?!\}))*\K(?:\r?\n)+(?=(?>[^%]+|%+(?!\}))*%\})
稍短(如果sublimetext正则表达式引擎足够聪明):
(?:\G(?!\A)|{%)(?>[^%\r\n]+|%+(?!}))*\K\R+(?=(?>[^%]+|%+(?!}))*%})
注意:如果您确定标记始终是平衡的,则可以删除最后一个前瞻(但这种方式不太安全):
(?:\G(?!\A)|{%)(?>[^%\r\n]+|%+(?!}))*\K\R+
答案 2 :(得分:0)
(\{%.*)\n\s*(.*%\})
替换字符串\1\2
将更改
{% url '
someURL ' %}
到{% url 'someURL ' %}