[英]How to search for a character string that is an escape sequence with re.search
我編寫了代碼來檢查字符串中是否包含轉義序列“\n”。 但是,它的行為出乎意料,所以我想知道原因。 為什么我得到的是case2的結果?
下面的代碼有效。 由於r"\n"
(reg1) 是由'\'
和'n'
兩個字符組成的字符串,我認為搜索並匹配目標字符串"\n"
是正確的。
import re
reg1 = r"\n"
print (re.search (reg1, "\n"))
#output: <re.Match object; span = (0, 1), match ='\n'>
下面的代碼期望 output 為 None,但它沒有。 由於轉義序列的換行符"\n"
(reg2)被用作模式,而由兩個字符'\'
和'n'
"\n"
組成的“\n”被用作目標字符串,認為它們不匹配。 然而,它確實匹配了。
import re
reg2 = "\n"
print (re.search (reg2, "\n"))
#output: <re.Match object; span = (0, 1), match ='\n'>
當涉及到用於正則表達式而不是目標的字符串的內容時,您是正確的。 該聲明:
"\n"
由兩個字符組成,'\'
和'n'
,用作目標字符串,
是不正確的。 字符串的解釋與上下文無關; r"\n"
總是 2 個字符,而"\n"
總是 1 個。這在Python Regular Expression HOWTO中有介紹:
r"\n"
是一個包含'\'
和'n'
的雙字符字符串,而"\n"
是一個包含換行符的單字符字符串。
使用非控制字符更容易證明這一點,因為文字“\n”會寫成:
你明白了嗎? 讓我們改用“þ”(刺)。
re.search(r"\u00FE", "\u00FE")
r"þ"
是一個包含 6 個字符的字符串,可編譯為正則表達式/þ/
。 這被正則表達式庫本身解釋為與刺字符匹配的轉義序列。
"þ"
由 python 解釋,生成字符串"þ"
。
/þ/
匹配"þ"
。
re.search("\u00FE", "\u00FE")
"þ"
是一個包含 1 個字符“þ”的字符串,它編譯為正則表達式/þ/
。
/þ/
匹配"þ"
。
結果:兩個正則表達式匹配。 唯一的區別是正則表達式在情況 1 中包含轉義序列,在情況 2 中包含字符文字。
您似乎想到的是目標的原始字符串:
re.search(r"\u00FE", r"\u00FE")
re.search("\u00FE", r"\u00FE")
這些都不匹配,因為兩個目標都不包含刺字符。
如果要匹配轉義序列,轉義字符必須在正則表達式中轉義:
re.search(r"\\u00FE", r"\u00FE")
re.search("\\\\u00FE", r"\u00FE")
這些模式中的任何一個都會產生正則表達式/\þ/
,它匹配包含給定轉義序列的字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.