如何刪除所有包含非 ASCII 鍵盤字元的行?
我嘗試了很多次正則表達式代碼,但沒有一個像它應該的那樣工作我什至嘗試過這個代碼[^\x00-\x7F]+
,但它沒有選擇所有字符
我想到的想法是使用這種方式[^a-z0-9``~!@#$%^&*()-_=+[]{}\|;:'"<>,./?]
,但仍然不起作用,因為其中一些角色沒有像這樣被取消選擇\
/
|
{
}
[
]
$
#
^
(
)
如果某行包含不在下面列表中的任何字符,我想將其刪除或添加書籤
0123456789`~!@#$%^&*()-_=+[]{}\/|;:'"<>,.? abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
簡單的例子:這裡發現了更多這樣的字元:https://en.wikipedia.org/wiki/List_of_Unicode_characters
0123456789`~!@#$%^&*()-_=+[]{}\|;:'"<>,./? abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ ¤©ª«¬¯°±²³´µ¶·¸¹º»¼½¾¿÷ÆIJŒœƔƕƋƕ ƜƝƢƸƾDžNJNjǽǾǼɁɀȾɎʒəɼʰʲʱʴʳʵʶʷʸˁˀˇˆ˟ˠ ˩˧Ͱͱͳʹͼͻͺ͵ͿΏΔΘΞΛΣΠΦΧΨΩΪΫάέήίΰαβδε θηκλμξπςρφχψωϊϋϏώϑϐϓϒϔϕϖϠϟϞϝϜϡϢ ϤϣϧϫϬϮϯϰϱ₠₡₢₣₤₥₦₧₨₩₪₫€₭₮₯₰₱₲ ₳₴₵₶₷₸₹₺₻₼₽₾₿⅐⅑⅒⅓⅔⅕⅖⅗⅘⅙⅚⅛⅜ ⅝⅞⅟℠℡™℣ℤ℥Ω℧ℨ℩KÅℬℭ℮ℯ⇀⇁ↀↁↂↃↄ ⇔⇕⇖⇗⇘⇙⇚⇛⇜⇝⇞⇟⇠⇡⇢⇣⇤⇥⇦⇧⇨⅀⅁⅂⅃⅄ⅅ ⅆⅇⅈⅉ⅊⅋⅌⅍ⅎ⅏ⅱⅲⅳⅴⅵⅶⅷⅸⅹⅺⅻⅼⅽ
預期結果:
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 解決方法來回答你的問題;))
我會有一個解決方案,不幸的是你也會失去撇號'
- 透過開始功能表開啟 Windows 的 bash
- 前往檔案所在的資料夾
cd /mnt/c/path/folder
(磁碟機 C: 位於 /mnt/c) 如果你的檔案名為foo.txt 你可以產生一個文件欄.txt用這個指令:
cat foo.txt | tr -cd '[:alnum:]\n\r~!@#$%^&*()-_=+{}\|;:<>,./?"`' | sed '/^$/d' > bar.txt
各部分說明:
cat foo.txt
輸出文字文件,並使用管道|
將輸出重定向到命令tr -cd
,該命令刪除每個字符,該字符不在'...'. Followed by a pipe to
sed to remove the empty lines. Last but not least with
> bar.txt`之間的列表中,我們將輸出重定向到文件欄.txt
謝謝:
答案3
在 Notepad++ 中這很簡單:
選單搜尋>標記...
尋找內容:
[^\x00-\x7F]
☑ 標記線
(•) 正規表示式按找到所有
選單搜尋>書籤>刪除已加入書籤的行