Các ký tự đặc biệt khiến việc xử lý văn bản trở nên phức tạp hơn vì bạn phải chú ý nhiều đến ngữ cảnh. Nếu bạn đang xem mã Python có chứa biểu thức chính quy, bạn phải suy nghĩ về những gì bạn thấy, Python thấy gì và công cụ biểu thức chính quy thấy gì. Một ký tự có thể đặc biệt đối với Python nhưng không phải là biểu thức chính quy hoặc ngược lại
Bài đăng này đi qua một ví dụ chi tiết cho thấy cách quản lý các ký tự đặc biệt trong một số ngữ cảnh khác nhau
Thoát các ký tự TeX đặc biệt
Gần đây tôi cần viết một biểu thức chính quy [1] để thoát khỏi các ký tự đặc biệt của TeX. Tôi đang đọc văn bản như ICD9_CODE
và cần biến nó thành ICD9\_CODE
để TeX hiểu dấu gạch dưới là dấu gạch dưới theo nghĩa đen và hướng dẫn chỉ số dưới
Dấu gạch dưới không phải là ký tự đặc biệt duy nhất trong TeX. Nó có mười ký tự đặc biệt
\ { } $ & # ^ _ % ~
Hai câu mà mọi người thường vấp phải nhất có lẽ là $
và
special = r"\\{}$^_%~"0 vì những câu này khá phổ biến trong văn xuôi thông thường. Vì
special = r"\\{}$^_%~"0 bắt đầu nhận xét trong TeX, nhập dấu phần trăm mà không thoát nó sẽ bị lỗi âm thầm. Kết quả là hợp lệ về mặt cú pháp. Nó chỉ cắt đứt phần còn lại của dòng một cách hiệu quả
Vì vậy, bất cứ khi nào tập lệnh của tôi nhìn thấy một ký tự đặc biệt TeX chưa được thoát, tôi muốn nó thoát khỏi ký tự đó
dây thô
Trước tiên, tôi cần nói cho Python biết các ký tự đặc biệt dành cho TeX
special = r"\\{}$^_%~"
Có điều gì đó thú vị đang diễn ra ở đây. Hầu hết các ký tự đặc biệt đối với TeX không đặc biệt đối với Python. Nhưng dấu gạch chéo ngược là đặc biệt cho cả hai. Dấu gạch chéo ngược cũng đặc biệt đối với các biểu thức chính quy. Tiền tố
special = r"\\{}$^_%~"2 trước dấu ngoặc kép cho Python biết đây là chuỗi "thô" và nó không nên hiểu dấu gạch chéo ngược là đặc biệt. Nó nói rằng “Tôi thực sự muốn một chuỗi bắt đầu bằng hai dấu gạch chéo ngược. ”
Tại sao hai dấu gạch chéo ngược? . Thêm về điều đó trong thời gian ngắn
Nhìn về phía sau
Đây là biểu thức chính quy của tôi
re.sub[r"[? . Nó được sử dụng để đại diện cho các ký tự khoảng trắng nhất định. "\t" là một tab, "\n" là một dòng mới và "\r" là một xuống dòng. Ngược lại, đặt trước một ký tự đặc biệt với "\" sẽ biến ký tự đó thành một ký tự thông thường.