2014-10-26 62 views
1

我試圖發展SublimeText2快速黑客(不理想,我知道)之間的換行符:如何刪除兩個字符串(正則表達式)

我有我的標記這個(頻繁)代碼:

{% url ' 
    someURL ' %} 

如何使用正則表達式來刪除換行符這樣的,我有{% url 'someURL '%}

我已經成功在括號之間選擇eveything:

​​3210

但是,我不知道如何只選擇換行符\n及其中的空格。

回答

3

使用正則表達式下面,然後用一個空格代替了比賽。

(?s)\s+(?=(?:(?!%}|\{%).)*%\}) 

DEMO

說明:

(?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 
+0

這很好,我如何將這限制在隱祕的範圍內,以便保留它們之外的換行符? EG:http://regex101.com/r/dN3kB4/11 – alias51 2014-10-26 14:25:27

+0

請參閱我的更新.. – 2014-10-26 14:28:20

0
(\{%.*)\n\s*(.*%\}) 

替換爲的字符串\1\2將改變

{% url ' 
    someURL ' %} 

{% url 'someURL ' %}

+1

''%是不是一個特殊字符。 – 2014-10-26 14:21:06

+0

謝謝,如果只有1個標籤,但是我有多個 – alias51 2014-10-26 14:21:32

+0

@CasimiretHippolyte,謝謝,我不知道。我只是看看OP的正則表達式。 – XrXrXr 2014-10-26 14:26:51

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+ 
相關問題