簡體   English   中英

對python中的反斜杠感到困惑

[英]Confused about the backslash in python

我理解為匹配文字反斜杠,必須在正則表達式中進行轉義。 使用原始字符串表示法,這意味着r"\\\\" 如果沒有原始字符串表示法,則必須使用"\\\\\\\\"

當我看到代碼string = re.sub(r"[^A-Za-z0-9(),!?\\'\\`]", " ", string) ,我想知道反斜杠在\\'的含義和\\` ,因為它也像'`一樣好用,比如string = re.sub(r"[^A-Za-z0-9(),!?'`]", " ", string) 是否需要添加反斜杠?

然后我在Python中嘗試一些例子。

1) str1 = "\'s"
   print(str1)
   str2 = "'s"
   print(str2)

結果與's相同。 我想這可能就是為什么在之前的代碼中,他們在string = re.sub(r"[^A-Za-z0-9(),!?\\'\\`]", " ", string)使用\\'\\` string = re.sub(r"[^A-Za-z0-9(),!?\\'\\`]", " ", string) 我想知道"\\'s""'s"之間有什么區別嗎?

2) string = 'adequately describe co-writer/director peter jackson\'s expanded vision of j . r . r . tolkien\'s middle-earth .'
   re.match(r"\\", string)

re.match什么re.match返回,這表明字符串中沒有反斜杠。 但是,我確實看到了反斜杠。 是,在反斜杠\\'其實並不是一個反斜杠?

謝謝你的幫助!

在python中,這些是轉義字符,因為除了它們在屏幕上顯示之外,它們還可以對代碼具有其他含義(例如,可以通過將其包裝在單個引號中來創建字符串)。 你可以在這里看到所有python字符串文字,但是在該字符串中沒有找到反斜杠的原因是它們被認為是轉義的單引號。 雖然沒有必要,但它仍然是有效的語法,因為有時需要它

請查看https://docs.python.org/2.0/ref/strings.html以獲得更好的解釋。

第二個例子的問題是string不是原始字符串,所以\\'被解釋為' 如果您將其更改為:

>>> not_raw = 'adequately describe co-writer/director peter jackson\'s expanded vision of j . r . r . tolkien\'s middle-earth .'
>>> res1 = re.search(r'\\',not_raw)
>>> type(res1)
<type 'NoneType'>
>>> raw = r'adequately describe co-writer/director peter jackson\'s expanded vision of j . r . r . tolkien\'s middle-earth .'
>>> res2 = re.search(r'\\',raw)
>>> type(res2)
<type '_sre.SRE_Match'>

有關re.match vs re.search的解釋: Python的re.search和re.match之間有什么區別?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM