日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

正则表达式如何匹配正反斜杠

發布時間:2023/12/9 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 正则表达式如何匹配正反斜杠 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載鏈接:http://wiki.ubuntu.org.cn/Python%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%93%8D%E4%BD%9C%E6%8C%87%E5%8D%97#.E5.8F.8D.E6.96.9C.E6.9D.A0.E7.9A.84.E9.BA.BB.E7.83.A6


反斜杠的麻煩

在早期規定中,正則表達式用反斜杠字符 ("\") 來表示特殊格式或允許使用特殊字符而不調用它的特殊用法。這就與 Python 在字符串中的那些起相同作用的相同字符產生了沖突。


讓我們舉例說明,你想寫一個 RE 以匹配字符串 "\section",可能是在一個 LATEX 文件查找。為了要在程序代碼中判斷,首先要寫出想要匹配的字符串。接下來你需要在所有反斜杠和其它元字符前加反斜杠來取消其特殊意義,結果要匹配的字符串就成了"\\section"。 當把這個字符串傳遞給re.compile()時必須還是"\\section"。然而,作為Python的字符串實值(string literals)來表示的話,"\\section"中兩個反斜杠還要再次取消特殊意義,最后結果就變成了"\\\\section"。

字符階段
\section要匹配的字符串
\\section為 re.compile 取消反斜杠的特殊意義
"\\\\section"為"\\section"的字符串實值(string literals)取消反斜杠的特殊意義


簡單地說,為了匹配一個反斜杠,不得不在 RE 字符串中寫 '\\\\',因為正則表達式中必須是 "\\",而每個反斜杠在常規的 Python 字符串實值中必須表示成 "\\"。在 REs 中反斜杠的這個重復特性會導致大量重復的反斜杠,而且所生成的字符串也很難懂

解決的辦法就是為正則表達式使用 Python 的 raw 字符串表示;在字符串前加個 "r" 反斜杠就不會被任何特殊方式處理,所以 r"\n" 就是包含"\" 和 "n" 的兩個字符,而 "\n" 則是一個字符,表示一個換行。正則表達式通常在 Python 代碼中都是用這種 raw 字符串表示。

常規字符串Raw 字符串
"ab*"r"ab*"
"\\\\section"r"\\section"
"\\w+\\s+\\1"r"\w+\s+\1"

執行匹配

一旦你有了已經編譯了的正則表達式的對象,你要用它做什么呢?`RegexObject` 實例有一些方法和屬性。這里只顯示了最重要的幾個,如果要看完整的列表請查閱 Python Library Reference

方法/屬性作用
match()決定 RE 是否在字符串剛開始的位置匹配
search()掃描字符串,找到這個 RE 匹配的位置
findall()找到 RE 匹配的所有子串,并把它們作為一個列表返回
finditer()找到 RE 匹配的所有子串,并把它們作為一個迭代器返回


如果沒有匹配到的話,match() 和 search() 將返回 None。如果成功的話,就會返回一個 `MatchObject` 實例,其中有這次匹配的信息:它是從哪里開始和結束,它所匹配的子串等等。


總結

以上是生活随笔為你收集整理的正则表达式如何匹配正反斜杠的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。