2016-12-12 52 views
1

分隔多年多段,我曾經在記事本中一個非常方便的技巧++和賽特這讓我由一個令牌拆分給定的字符串了。例如,給定此輸入:記事本++的正則表達式:匹配的令牌

first name|last name 
bob|johansen 
scarlet|scarnetti 
nelson|huguemeyer 

然後,我可以執行一個正則表達式來將其轉換爲HTML表格。搜索字符串將是:

(.+)|(.+) 

而替換字符串是:

<tr><td>\1</td><td>\2</td></tr> 

最終的結果將是:

<tr><td>first name</td><td>last name</td></tr> 
<tr><td>bob</td><td>johansen</td></tr> 
<tr><td>scarlet</td><td>scarnetti</td></tr> 
<tr><td>nelson</td><td>huguemeyer</td></tr> 

當我有數以百計的長行的電子表格並需要轉換成HTML格式,這是非常有用的!

不幸的是,在最近的版本似乎正則表達式引擎已經改變,使得上面不再作品我的搜索模式。的(.+)第一次出現從線到線的末端的開始處匹配的一切,忽略了中間的|字符。

我已經無可奈何地通過各種不同的搜索模式試圖找到一個將獲得一切到第一個|,然後一切後面的一切。在較長的實例中,有可能是通過|字符分隔五或六個不同的段。

到目前爲止,我的努力都失敗了。在Notepad ++中,通過正則表達式在特定的標記中分割一行輸入需要做些什麼?

+2

曾經出現過的工作?我認爲你需要'(。+)\ |(。+)'。如果你需要所有的* first *'|',那麼你的模式根本就不工作,你需要'(。*?)\ |(。*)'。 *在較長的例子中,可能會有五個或六個不同的段被|隔開人物。* - 那你想要什麼? –

+0

它發生,我要替換所有'|'和'​​'(無需正則表達式),然後2)'^'正則表達式用'​​'3)'$'和''。這可以被打包成1個正則表達式替換。 –

+0

是的,它工作很好多年。但是我最近升級到了更新的版本 - 從2007年起我一直在使用SciTE版本,直到最近,它看起來像最近的Notepad ++有很多不同之處。例如,'|'在我的舊版本中不是常規表達式的重要字符。當我習慣單線時,它似乎默認在多行上運行。根據你的第二條評論,我嘗試了'^([^ \ |] +)\ |([^ \ |] +)\ |([^ \ |] +)$'我想要的。作爲答案的文件,我會接受它。 –

回答

2

在當前的NPP版本中,|替換運算符。它必須在字符類之外轉義以匹配文字管道符號。

^([^\|]+)\|([^\|]+)\|([^\|]+)$將只匹配3部分|分隔字符串。

我想建議實現該邏輯在我second comment到問題的正則表達式:

(^)|($)|\| 

(?{1}<tr><td>:?{2}</td></tr>:</td><td>) 

搜索模式替換113

  • (^) - 組1:行的開始
  • | - 或
  • ($) - 組2:線
  • |的端 - 或
  • \| - 字面|

更換細節

  • (?{1} - 如果第1組匹配,
    • <tr><td> - 取代(實際上,加)<tr><td>在該行開始
  • :?{2} - 否則,如果第2組匹配,
    • </td></tr> - 在行添加</td></tr>結束
  • : - 否則,|被替換</td><td>
  • ) - 條件置換條款結束。

見截圖:

enter image description here

+0

謝謝。將來我想我會用一些不太可能成爲保留字的東西作爲我的標記,比如說aÞ或類似的東西。 –