如何使用 Notepad++ 或 Emeditor 刪除包含任何非 ASCII 字元的所有行

如何使用 Notepad++ 或 Emeditor 刪除包含任何非 ASCII 字元的所有行

如何刪除所有包含非 ASCII 鍵盤字元的行?

我嘗試了很多次正則表達式代碼,但沒有一個像它應該的那樣工作我什至嘗試過這個代碼[^\x00-\x7F]+,但它沒有選擇所有字符

我想到的想法是使用這種方式[^a-z0-9``~!@#$%^&*()-_=+[]{}\|;:'"<>,./?],但仍然不起作用,因為其中一些角色沒有像這樣被取消選擇\ / | { } [ ] $ # ^ ( )

  1. 如果某行包含不在下面列表中的任何字符,我想將其刪除或添加書籤

    0123456789`~!@#$%^&*()-_=+[]{}\/|;:'"<>,.?
    abcdefghijklmnopqrstuvwxyz
    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    
  2. 簡單的例子:這裡發現了更多這樣的字元:https://en.wikipedia.org/wiki/List_of_Unicode_characters

    0123456789`~!@#$%^&*()-_=+[]{}\|;:'"<>,./?
    abcdefghijklmnopqrstuvwxyz
    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    ¤©ª«¬¯°±²³´µ¶·¸¹º»¼½¾¿÷ÆIJŒœƔƕƋƕ
    ƜƝƢƸƾDžNJNjǽǾǼɁɀȾɎʒəɼʰʲʱʴʳʵʶʷʸˁˀˇˆ˟ˠ
    ˩˧Ͱͱͳʹͼͻͺ͵ͿΏΔΘΞΛΣΠΦΧΨΩΪΫάέήίΰαβδε
    θηκλμξπςρφχψωϊϋϏώϑϐϓϒϔϕϖϠϟϞϝϜϡϢ
    ϤϣϧϫϬϮϯϰϱ₠₡₢₣₤₥₦₧₨₩₪₫€₭₮₯₰₱₲
    ₳₴₵₶₷₸₹₺₻₼₽₾₿⅐⅑⅒⅓⅔⅕⅖⅗⅘⅙⅚⅛⅜
    ⅝⅞⅟℠℡™℣ℤ℥Ω℧ℨ℩KÅℬℭ℮ℯ⇀⇁ↀↁↂↃↄ
    ⇔⇕⇖⇗⇘⇙⇚⇛⇜⇝⇞⇟⇠⇡⇢⇣⇤⇥⇦⇧⇨⅀⅁⅂⅃⅄ⅅ
    ⅆⅇⅈⅉ⅊⅋⅌⅍ⅎ⅏ⅱⅲⅳⅴⅵⅶⅷⅸⅹⅺⅻⅼⅽ
    
  3. 預期結果:

    0123456789`~!@#$%^&*()-_=+[]{}\|;:'"<>,./?
    abcdefghijklmnopqrstuvwxyz
    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    

答案1

[^\x00-\x7F]工作正常,但是,如果您想使用像這樣的長字符類,則[^a-z0-9``~!@#$%^&*()-_=+[]{}\|;:'"<>,./?]必須轉義具有特殊含義的字符(即-[]\並添加 linebreak \r, \n.

你的正規表示式變成:

 [^a-z0-9``~!@#$%^&*()\-_=+\[\]{}\\|;:'"<>,./?\r\n]
 #                    ^    ^ ^   ^            ^^^^

  • Ctrl+H
  • 尋找內容:[^a-z0-9``~!@#$%^&*()\-_=+\[\]{}\\|;:'"<>,./?\r\n]+$ 但是,再次,[^\x00-\x7F]工作正常並且更具可讀性
  • 用。LEAVE EMPTY
  • 檢查環繞
  • 檢查正規表示式
  • Replace all

給定範例的結果:

0123456789`~!@#$%^&*()-_=+[]{}\|;:'"<>,./?
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ

答案2

如果您不知道解決方案並且未固定到 Notepad++,您可以為 Win 10 安裝 bash,如我在此處所示https://superuser.com/a/1252271/715210(抱歉,我總是用 Linux 解決方法來回答你的問題;))

我會有一個解決方案,不幸的是你也會失去撇號'

  1. 透過開始功能表開啟 Windows 的 bash
  2. 前往檔案所在的資料夾cd /mnt/c/path/folder(磁碟機 C: 位於 /mnt/c)
  3. 如果你的檔案名為foo.txt 你可以產生一個文件欄.txt用這個指令:

    cat foo.txt | tr -cd '[:alnum:]\n\r~!@#$%^&*()-_=+{}\|;:<>,./?"`' | sed '/^$/d' > bar.txt

各部分說明:

cat foo.txt輸出文字文件,並使用管道|將輸出重定向到命令tr -cd,該命令刪除每個字符,該字符不在'...'. Followed by a pipe tosed to remove the empty lines. Last but not least with> bar.txt`之間的列表中,我們將輸出重定向到文件欄.txt

謝謝:

答案3

在 Notepad++ 中這很簡單:

  1. 選單搜尋>標記...

  2. 尋找內容:[^\x00-\x7F]
    ☑ 標記線
    (•) 正規表示式

  3. 找到所有

  4. 選單搜尋>書籤>刪除已加入書籤的行

相關內容