Regular expression: Difference between revisions

From LemonWiki共筆
Jump to navigation Jump to search
Line 182: Line 182:
* Copy to MS Excel 2002 from Google Docs: ok
* Copy to MS Excel 2002 from Google Docs: ok


[[Category:RegExp]] [[Category:Software]] [[Category:Programming]] [[Cateogry:Data science]]
[[Category:RegExp]] [[Category:Software]] [[Category:Programming]] [[Category:Data science]]

Revision as of 10:25, 23 December 2014

正規表示法 (Regular Expression):以行為單位來處理字串,處理方式例如取代符合特定規則的字串。[1]

Raise_hand.png 有問題嗎? 看板 RegExp 文章列表 - 批踢踢實業坊或其他問答服務

Regular expression online tools

case

將Email清單,轉成Email軟體可以使用的寄信名單 (取代換行符號)

[email protected]
[email protected]
[email protected]

改成
[email protected], [email protected], [email protected]

方案1: Sublime Text, EmEditor

語法適用 Sublime Text, EmEditor軟體 (以下為 EmEditor 的操作說明)

  1. Menu: Search -> Replace
  2. click "Use Regular Expression"
    1. Find: \n
    2. Replace with: ,
  3. click "Replace all"

方案2: Notepad++

使用Notepad++軟體

  1. 選單: 尋找 -> 取代
  2. 搜尋模式: 勾選「增強模式」 (不是勾選「用類型表式」)
    1. 尋找目標: \r\n
    2. 取代成: ,
  3. 勾選全部取代

相關資料: How To Replace Line Ends, thus changing the line layout last visited: 2010-01-27

方案3: Microsoft Word

使用Microsoft Word 2002軟體

  1. 選單: 編輯 -> 取代
  2. 勾選增強模式
    1. 尋找目標: ^p (段落標記)
    2. 取代為: ,
  3. 勾選全部取代

方案4: Sed command for linux

sed 's/要被取代的字串/新的字串/g' old.filename > new.filename[2]

(1)要被取代的字串: :a;N;$!ba;s/\n (2)新的字串: ;

sed ':a;N;$!ba;s/\n/; /g' old.filename > new.filename [3]

Find IP address

使用Notepad++軟體 v.5.9.5

  1. 選單: 尋找 -> 取代
  2. 搜尋模式: 勾選「用類型表式」
    1. 尋找目標: \d\d?\d?\.\d\d?\d?\.\d\d?\d?\.\d\d?\d?

note: not support {n} syntax

參考資料: SourceForge.net: Notepad++: Regular expression for IP addresses


移除記事本純文字檔的黑色方塊(UNIX系統的換行符號 LF )

使用notepad++軟體

  1. 選單: 尋找 -> 取代
  2. 搜尋模式: 勾選「增強模式」
    1. 尋找目標: \n\n (註: 2個LF )
    2. 取代成: \r\n (註: CR與LF )

用記事本打開純文字檔時,就不會看到黑色方塊


將陣列的每項元素,都加上引號框起來

Elmo, Emie, Granny Bird, Herry Monster, 喀喀獸
修改成
'Elmo', 'Emie', 'Granny Bird', 'Herry Monster', '喀喀獸'

使用 PHP

$users = array('Elmo', 'Emie', 'Granny Bird', 'Herry Monster', '喀喀獸');
//引號相隔每個元素
$result = implode(",", preg_replace('/^(.*?)$/', "'$1'", $users));

//如果要改成用雙引號相隔每個元素
//$result = implode(",", preg_replace('/^(.*?)$/', "\"$1\"", $users));
echo $result;

Thanks, Joshua! More on PHP - Wrap Implode Array Elements in Quotes » Me Like Dev

取代非英文的文字

適用: Google Drive 的 RegExReplace 函數、Notepad++的搜尋

[^\x00-\x80]+

適用: Total commander 的 Multi-Rename tool[4]

[^\u0000-\u0080]+

參考資料: javascript - Regular expression to match non-english characters? - Stack Overflow

將每行文字的行頭加上逗號符號

使用notepad++軟體

  1. 選單: 尋找 -> 取代
  2. 搜尋模式: 勾選「用類型表示」
    1. 尋找目標: (.*) 或者是 ^(.*)$
    2. 取代成: ,\1 或者是 ,$1

參考資料: Notepad++ RegEx Search/Replace: How to append and prepend a character at start and end of each file line? - Stack Overflow


知道前面跟後面的文字,但是中間文字忘記了

使用notepad++軟體

  1. 選單: 尋找 -> 取代
  2. 搜尋模式: 勾選「用類型表示」
    1. 尋找目標: a(.*)le 就可以找到(1)apple (2)apps lesson ... 等a開頭、le結尾的文字,中間可夾雜空白。 Icon_exclaim.gif 中文字串搜尋,建議將文件的編碼改成 UTF-8 編碼


移除空白行

移除一行空白或多行空白(含空白字元)

  • 尋找: ^[\s\t]*$\n --> 取代為: 空白 (適用 Sublime Text 與 EmEditor 軟體, Icon_exclaim.gif 不適用 Notepad++ 軟體)[5]
  • Notepad++ 軟體選單: 編輯 -> 行列 -> 移除空行(含空白字元)[6]

移除一行空白或多行空白

  • 尋找: ^$\n --> 取代為: 空白 (適用 Sublime Text 與 EmEditor 軟體, Icon_exclaim.gif 不適用 Notepad++ 軟體)
  • 尋找: \r\n[\r\n]*\r\n[\r\n]+ --> 取代為: \r\n (適用 Notepad++ 軟體,需勾選「用類型表式)
  • 尋找: \n(\n)+ --> 取代為: \n(適用 Sublime Text 軟體,需 勾選「regular expression」)

移除一行空白

  • 尋找: \n\n --> 取代為: \n (適用 Sublime Text 與 EmEditor 軟體,需勾選「使用規則運算式」)

Search unmatched string

case: find un-commented console.log

original format: some lines contains un-commented Javascript debug information

   console.log("un-commented debug information");

  //console.log("commented debug information");

Search pattern: find not started with the / symbol before the string "console.log"

   [^/](console\.log)

batch action

  • Good.gif RegReplace 執行多個取代命令 "Simple find and replace sequencer plugin for Sublime Text" Quoted from official webpage. [Last visited: 2014-10-25]

syntax

  • 換行符號: \r\n (適用: Notepad++選項: 增強模式 & 用類型表式)
  • tab鍵的固定空白分隔: \t (適用: Notepad++選項: 增強模式)
  • 數字: \d (適用: Notepad++選項: 用類型表式。Icon_exclaim.gif 不適用: Notepad++選項: 增強模式)

further reading

unicode

references

替代方案

  • 將資料以 Tab來隔開,貼到Google Drive的Spreadsheet或MS Excel,會自動儲存到不同欄位。所以將需要處理的原始資料中,需要擷取的資料的前後,使用Tab來隔開,複製後貼到於Google Drive的Spreadsheet或MS Excel,就會自動儲存到不同欄位,方便做進一步處理。

Copy multiple rows & paste

  • Copy to dreamweaver from MS Excel 2002: ok
  • Copy to dreamweaver from Google Docs: not ok Icon_exclaim.gif
  • Copy to MS Excel 2002 from Google Docs: ok