Hướng dẫn how do you escape a backslash in regex python? - làm thế nào để bạn thoát khỏi một dấu gạch chéo ngược trong regex python?

Một ký tự R trước biểu thức chính quy trong lệnh gọi để tìm kiếm () chỉ định rằng biểu thức chính quy là một chuỗi thô. Điều này cho phép sử dụng dấu gạch chéo ngược trong biểu thức thông thường như các ký tự thông thường hơn là trong một chuỗi các ký tự thoát. Hãy để tôi giải thích ...

Trước khi phương thức tìm kiếm của mô -đun RE xử lý các chuỗi được truyền cho nó, trình thông dịch Python sẽ vượt qua chuỗi ban đầu. Nếu có các dấu gạch chéo ngược trong một chuỗi, trình thông dịch Python phải quyết định xem mỗi người là một phần của chuỗi thoát Python (ví dụ: \ n hoặc \ t) hoặc không.

Lưu ý: Tại thời điểm này, Python không quan tâm liệu '\' có phải là một nhân vật tổng hợp biểu thức thông thường hay không.

Nếu '\' được theo sau bởi một ký tự thoát Python được công nhận (t, n, v.v.), thì dấu gạch chéo ngược và ký tự thoát được thay thế bằng ký tự unicode hoặc 8 bit thực tế. Ví dụ: '\ t' sẽ được thay thế bằng ký tự ASCII cho tab. Nếu không, nó được truyền qua và được hiểu là một nhân vật '\'.

Xem xét những điều sau đây.

>>> s = '\t'
>>> print ("[" + s  + "]")
>>> [       ]           // an actual tab character after preprocessing

>>> s = '\d'
>>> print ("[" + s  + "]")
>>> [\d]                // '\d' after preprocessing

Đôi khi chúng tôi muốn đưa vào một chuỗi một chuỗi ký tự bao gồm '\' mà không được Python hiểu là một chuỗi thoát. Để làm điều này, chúng tôi thoát khỏi '\' với '\'. Bây giờ khi Python nhìn thấy '\', nó thay thế hai dấu gạch chéo ngược bằng một ký tự '\' duy nhất.

>>> s = '\\t'
>>> print ("[" + s  + "]")
>>> [\t]                // '\t' after preprocessing

Sau khi trình thông dịch Python vượt qua cả hai chuỗi, chúng được chuyển sang phương thức tìm kiếm của mô -đun RE. Phương thức tìm kiếm phân tích chuỗi biểu thức thông thường để xác định các ký tự meta của biểu thức thông thường.

Bây giờ '\' cũng là một nhân vật tổng hợp biểu thức thông thường đặc biệt và được hiểu là một trừ khi nó được thoát ra tại thời điểm phương thức tìm kiếm RE () được thực thi.

Xem xét cuộc gọi sau.

>>> match = re.search('a\\t','a\\t')        //Match is None

Ở đây, trận đấu là không có. Tại sao? Hãy nhìn vào các chuỗi sau khi thông dịch viên Python thực hiện vượt qua.

String 1: 'a\t'
String 2: 'a\t' 

Vậy tại sao khớp với không có? Khi search () diễn giải chuỗi 1, vì nó là một biểu thức chính quy, dấu gạch chéo ngược được hiểu là một nhân vật tổng hợp, không phải là một ký tự thông thường. Tuy nhiên, dấu gạch chéo ngược trong chuỗi 2 không nằm trong một biểu thức thông thường và đã được trình thông dịch Python xử lý, vì vậy nó được hiểu là một ký tự thông thường.

Vì vậy, phương thức search () đang tìm kiếm 'A Escape-t' trong chuỗi 'a \ t' không phải là một trận đấu.

Để khắc phục điều này, chúng ta có thể nói cho phương thức search () để không giải thích '\' như một nhân vật tổng hợp. Chúng ta có thể làm điều này bằng cách thoát khỏi nó.

Xem xét cuộc gọi sau.

Ở đây, trận đấu là không có. Tại sao? Hãy nhìn vào các chuỗi sau khi thông dịch viên Python thực hiện vượt qua.

Vậy tại sao khớp với không có? Khi search () diễn giải chuỗi 1, vì nó là một biểu thức chính quy, dấu gạch chéo ngược được hiểu là một nhân vật tổng hợp, không phải là một ký tự thông thường. Tuy nhiên, dấu gạch chéo ngược trong chuỗi 2 không nằm trong một biểu thức thông thường và đã được trình thông dịch Python xử lý, vì vậy nó được hiểu là một ký tự thông thường.

String 1: 'a\\t'
String 2: 'a\t'

Vì vậy, phương thức search () đang tìm kiếm 'A Escape-t' trong chuỗi 'a \ t' không phải là một trận đấu.

Để khắc phục điều này, chúng ta có thể nói cho phương thức search () để không giải thích '\' như một nhân vật tổng hợp. Chúng ta có thể làm điều này bằng cách thoát khỏi nó.

>>> match = re.search('a\\\\t','a\\t')          // Match contains 'a\t'

>>> match = re.search(r'a\\t','a\\t')           // match contains 'a\t'

Một lần nữa, hãy nhìn vào các chuỗi sau khi phiên dịch viên Python đã vượt qua.

String 1: 'a\\t'
String 2: 'a\t'

Bây giờ khi phương thức tìm kiếm () xử lý biểu thức chính quy, nó thấy rằng dấu gạch chéo ngược thứ hai được thoát ra bởi phương pháp thứ nhất và không nên được coi là một nhân vật tổng hợp. Do đó, nó diễn giải chuỗi là 'a \ t', phù hợp với chuỗi 2.

Cuối cùng, "\" có thể được sử dụng để thoát khỏi chính nó: "\\" là ký tự dấu gạch chéo ngược theo nghĩa đen.

Giả sử bạn muốn viết một RE khớp với chuỗi "\ mart", có thể được tìm thấy trong một tệp latex. Để tìm ra những gì cần viết trong mã chương trình, hãy bắt đầu với chuỗi mong muốn được khớp. Tiếp theo, bạn phải thoát khỏi bất kỳ dấu gạch chéo ngược nào và các metacharacters khác bằng cách trước chúng bằng một dấu gạch chéo ngược, dẫn đến chuỗi "\\ phần". Chuỗi kết quả phải được chuyển cho re.compile () phải là \\section. Tuy nhiên, để thể hiện điều này như một chuỗi Python theo nghĩa đen, cả hai dấu gạch chéo ngược phải được thoát ra một lần nữa.LATEX file. To figure out what to write in the program code, start with the desired string to be matched. Next, you must escape any backslashes and other metacharacters by preceding them with a backslash, resulting in the string "\\section". The resulting string that must be passed to re.compile() must be \\section. However, to express this as a Python string literal, both backslashes must be escaped again.

Nhân vậtSân khấu
\sectionChuỗi văn bản được khớp
________số 8Thoát khỏi sự chao đảo cho re.compile
>>> s = '\\t'
>>> print ("[" + s  + "]")
>>> [\t]                // '\t' after preprocessing
1
Thoát khỏi sự chéo ngược cho một chuỗi theo nghĩa đen

Nói tóm lại, để phù hợp với dấu gạch chéo ngược theo nghĩa đen, người ta phải viết '\\\\\\' làm chuỗi re, vì biểu thức thông thường phải là "\\" và mỗi dấu gạch chéo ngược phải được biểu thị là "\\" bên trong một python thông thường chuỗi chữ. Trong RES đó là các dấu gạch chéo ngược nhiều lần, điều này dẫn đến rất nhiều dấu gạch chéo ngược lặp đi lặp lại khiến các chuỗi kết quả khó hiểu.

Giải pháp là sử dụng ký hiệu chuỗi thô của Python cho các biểu thức thông thường; BackSlashes không được xử lý theo bất kỳ cách đặc biệt nào trong một chuỗi theo nghĩa đen được đặt trước với "r", vì vậy r "\ n" là một chuỗi hai tính năng chứa "\" và "n", trong khi "\ n" là một chuỗi một ký tự chứa một dòng mới. Các biểu thức thường xuyên thường xuyên sẽ được thể hiện trong mã Python bằng cách sử dụng ký hiệu chuỗi thô này.

Chuỗi thông thườngChuỗi thô
>>> s = '\\t'
>>> print ("[" + s  + "]")
>>> [\t]                // '\t' after preprocessing
2
r "ab*"
>>> s = '\\t'
>>> print ("[" + s  + "]")
>>> [\t]                // '\t' after preprocessing
1
r "\\ phần"
>>> s = '\\t'
>>> print ("[" + s  + "]")
>>> [\t]                // '\t' after preprocessing
4
r "\ w+\ s+\ 1"

Làm thế nào để bạn thoát khỏi một dấu gạch chéo ngược trong Python?

Cuối cùng, "\" có thể được sử dụng để thoát khỏi chính nó: "\\" là ký tự dấu gạch chéo ngược theo nghĩa đen."\\" is the literal backslash character.

Làm thế nào để bạn thoát khỏi một dấu gạch chéo ngược trong biểu hiện thông thường?

Bởi vì Backslash \ có ý nghĩa đặc biệt trong các chuỗi và regexes, nếu chúng ta muốn nói với Perl rằng chúng ta thực sự có nghĩa là một cuộc trôi qua, chúng ta sẽ phải "thoát" nó, bằng cách sử dụng "ký tự thoát" xảy rachính nó.Vì vậy, chúng ta cần viết hai lần trượt ngược: \\.using the "escape character" which happens to be back-slash itself. So we need to write two back-slashes: \\.

Làm thế nào để bạn thoát khỏi các nhân vật đặc biệt trong Regex Python?

Thoát ra với \ để phù hợp với các metacharacters theo nghĩa đen, tức là để loại bỏ ý nghĩa đặc biệt của chúng, tiền tố các ký tự đó có ký tự \ (dấu gạch chéo ngược).Để chỉ ra một ký tự \ theo nghĩa đen, hãy sử dụng \\.prefix those characters with a \ (backslash) character. To indicate a literal \ character, use \\ .

Việc sử dụng \\ trong regex là gì?

Bạn cũng cần sử dụng regex \\ để phù hợp với "\" (slash ngược).Regex nhận ra các trình tự thoát phổ biến như \ n cho Newline, \ t cho tab, \ r để quay lại vận chuyển, \ nnn cho số octal lên tới 3 chữ số, \ xhh cho mã hex hai chữ số, \ uhhhh cho mộtUnicode 4 chữ số, \ uhhhhhhhhh cho một unicode 8 chữ số.to match "\" (back-slash). Regex recognizes common escape sequences such as \n for newline, \t for tab, \r for carriage-return, \nnn for a up to 3-digit octal number, \xhh for a two-digit hex code, \uhhhh for a 4-digit Unicode, \uhhhhhhhh for a 8-digit Unicode.