Hướng dẫn double backslash regex python - dấu gạch chéo ngược kép regex python

This is @Matthias's answer, adapted to Python:

In [6]: re.sub(r':?\\+', '/', r'G:\\one\\two\\three.htm')
Out[6]: 'G/one/two/three.htm'

Note the regex pattern is

In [7]: list(':?\\+')
Out[7]: [':', '?', '\\', '+']
6, not
In [7]: list(':?\\+')
Out[7]: [':', '?', '\\', '+']
7.

The

In [7]: list(':?\\+')
Out[7]: [':', '?', '\\', '+']
8 tells Python that what follows is a raw string.

Python interprets

In [7]: list(':?\\+')
Out[7]: [':', '?', '\\', '+']
7 as a string with one backslash:

In [7]: list(':?\\+')
Out[7]: [':', '?', '\\', '+']

Using

In [8]: list(r':?\\+')
Out[8]: [':', '?', '\\', '\\', '+']
0, as above, allows you to see the individual characters in the string.
In [8]: list(r':?\\+')
Out[8]: [':', '?', '\\', '\\', '+']
1 is a Python string consisting of one backslash.

Python interprets

In [7]: list(':?\\+')
Out[7]: [':', '?', '\\', '+']
6 as a string with two backslashes:

In [8]: list(r':?\\+')
Out[8]: [':', '?', '\\', '\\', '+']

The reason why

In [8]: list(r':?\\+')
Out[8]: [':', '?', '\\', '\\', '+']
3 worked for you is because Python interprets it as a string with four backslashes:

In [9]: list(':?\\\\\\\\')
Out[9]: [':', '?', '\\', '\\', '\\', '\\']

The regex engine then interprets every two backslashes as a pattern matching one literal backslash. So regex interprets the four backslashes as a pattern which matches two literal backslashes.

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 ...

Nội dung chính

  • Backslash làm gì ở Regex?
  • \\ có nghĩa là gì trong regex?
  • Backslash w trong regex là gì?
  • Làm cách nào để đánh dấu lại một chuỗi trong Python?

Sử dụng cú pháp "\\" trong chuỗi theo nghĩa đen để biểu thị một dấu gạch chéo ngược..

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 ...

Nội dung chính

Backslash làm gì ở Regex?

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

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

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.

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

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.

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

Đô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.

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

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.

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

Đô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.

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.

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'
In [7]: list(':?\\+')
Out[7]: [':', '?', '\\', '+']
0

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.

Backslash ngăn chặn ý nghĩa đặc biệt của nhân vật mà nó đi trước, và biến nó thành một nhân vật thông thường. Để chèn dấu gạch chéo ngược vào mẫu biểu thức thông thường của bạn, hãy sử dụng Double Backslash ('\\'). Dấu ngoặc đơn mở cho thấy một "biểu hiện phụ", được thảo luận dưới đây.

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à

In [8]: list(r':?\\+')
Out[8]: [':', '?', '\\', '\\', '+']
4. 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
In [8]: list(r':?\\+')
Out[8]: [':', '?', '\\', '\\', '+']
4. However, to express this as a Python string literal, both backslashes must be escaped again. 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
In [8]: list(r':?\\+')
Out[8]: [':', '?', '\\', '\\', '+']
4. However, to express this as a Python string literal, both backslashes must be escaped again.

Nhân vậtSân khấu
In [8]: list(r':?\\+')
Out[8]: [':', '?', '\\', '\\', '+']
6
Chuỗi văn bản được khớp
________số 8 Thoá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
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ường

Chuỗi thôsuppresses the special meaning of the character it precedes, and turns it into an ordinary character. To insert a backslash into your regular expression pattern, use a double backslash ('\\'). The open parenthesis indicates a "subexpression", discussed below.

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

r "ab*" matches the literal character . . the first backslash is interpreted as an escape character by the Emacs string reader, which combined with the second backslash, inserts a literal backslash character into the string being read. the regular expression engine receives the string \. html?\ ' .

r "\\ phần"

>>> s = '\\t'
>>> print ("[" + s  + "]")
>>> [\t]                // '\t' after preprocessing
4 matches any single letter, number or underscore (same as [a-zA-Z0-9_] ). The uppercase counterpart \W (non-word-character) matches any single character that doesn't match by \w (same as [^a-zA-Z0-9_] ). In regex, the uppercase metacharacter is always the inverse of the lowercase counterpart.

Làm cách nào để đánh dấu lại một chuỗi trong Python?

Sử dụng cú pháp "\\" trong chuỗi theo nghĩa đen để biểu thị một dấu gạch chéo ngược...