我試圖發展SublimeText2快速黑客(不理想,我知道)之間的換行符:如何刪除兩個字符串(正則表達式)
我有我的標記這個(頻繁)代碼:
{% url '
someURL ' %}
如何使用正則表達式來刪除換行符這樣的,我有{% url 'someURL '%}
我已經成功在括號之間選擇eveything:
3210但是,我不知道如何只選擇換行符\n
及其中的空格。
我試圖發展SublimeText2快速黑客(不理想,我知道)之間的換行符:如何刪除兩個字符串(正則表達式)
我有我的標記這個(頻繁)代碼:
{% url '
someURL ' %}
如何使用正則表達式來刪除換行符這樣的,我有{% url 'someURL '%}
我已經成功在括號之間選擇eveything:
3210但是,我不知道如何只選擇換行符\n
及其中的空格。
使用正則表達式下面,然後用一個空格代替了比賽。
(?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
您可以使用此模式:
(?:\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+
這很好,我如何將這限制在隱祕的範圍內,以便保留它們之外的換行符? EG:http://regex101.com/r/dN3kB4/11 – alias51 2014-10-26 14:25:27
請參閱我的更新.. – 2014-10-26 14:28:20