簡體   English   中英

Python Docs關於正則表達式錯誤“\ b”?

[英]Python Docs Wrong About Regular Expression “\b”?

通過昨天的問題獲得幫助 - Python 2.7 - 從文本文件中查找和替換,使用字典,到新的文本文件 - 我今天開始學習正則表達式,以了解@Blckknght為其創建的正則表達式代碼我的回答。

但是,在我看來,對於\\b代碼,python文檔(或者更可能是我)稍微不正確。 我在關於\\ b的python文檔中引用的部分是這樣的:

例如,r'\\ bfoo \\ b'匹配'foo','foo。','(foo)','bar foo baz'但不匹配'foobar'或'foo3'。

(鏈接到頁面http://docs.python.org/2/library/re.html

我無法理解'bar foo baz'是如何匹配的? 例如,如果我創建此代碼:

import re

m = re.search(r'\bfoo\b', 'bar foo baz')
m.group()

...然后我從控制台得到這個結果:

'foo'

... 並不是

'bar foo baz'

事實上,基於python文檔中關於'\\ b'的其余解釋,我實際上期望'foo'打印到控制台,因為它匹配單詞開頭和結尾的空字符串。

那么, 'bar foo baz'匹配的python文檔中的交易是什么?

編輯:我正在使用python 2.7

我實際上期望'foo'打印到控制台,因為它匹配單詞開頭和結尾的空字符串。

你的意思是寫' foo ' ,每一端都有空格嗎? 它不捕獲空格,因為\\b匹配轉換 ,字符之間的間隙,而不是字符本身。


正規法師的工作方式有些隨意

正則表達式系統將字符串視為“令牌”流,其中令牌與文本文件中的字符之間存在1:1的關系。 \\bfoo\\b這樣的表達式只是為類似吃豆人的機器人編寫規則的超短方式。

例如,假設我們有foo b4r b@z 令牌流可能類似於:

misc    :  start_of_string
misc    :  word_boundary
letter  :  'f'
letter  :  'o'
letter  :  'o'
misc    :  word_boundary
wspace  :  ' '
misc    :  word_boundary
letter  :  'b'
number  :  '4'
letter  :  'r'
misc    :  word_boundary
wspace  :  ' '
misc    :  word_boundary
letter  :  'b'
misc    :  word_boundary
char    :  '@'
misc    :  word_boundary
letter  :  'z'
misc    :  word_boundary
misc    :  end_of_string

當你進行re.search(r'\\bfoo\\b',str)時, 最終會成為pac-man遵循的一套規則,大致如下:

  1. 從頭開始。
  2. 忽略一些事情,直到找到misc:word_boundary
  3. misc:word_boundary並記住你當前的位置是$ N.
  4. 試着吃letter:'f' 如果你不能,吐出一切,前往$ N + 1,然后去規則#2。
  5. 試着吃letter:'o' 如果你不能,吐出一切,前往$ N + 1,然后去規則#2。
  6. 試着吃letter:'o' 如果你不能,吐出一切,前往$ N + 1,然后去規則#2。
  7. 嘗試吃一個misc:'word_boundary' 如果你不能,吐出一切,前往$ N + 1,然后去規則#2。
  8. 告訴我你現在肚子里有什么。

顯然你可以在那里進行復雜化,例如使用循環( +*? )和速記(如“ abc或......”的\\w )或者它如何選擇性地忽略某些標記,但希望如此基本風格被揭示出來。

那么......我現在能解析HTML / XML嗎?

簡短的回答? 不,Pac-man只能運行,但XML就像一棵樹。 吃豆人必須停在某些地方並聘請一些男人來為他探索(用他們自己不同的規則)並報告。 那些分包商也會有自己的分包商......

無論如何,吃豆人的人的技能在生活在一個充滿致命的鬼魂和性能增強葯物的不可避免的迷宮中發育不良。 當你所能說的只是Wakka時,你不可能在Pac-Corp中走得很遠。

暫無
暫無

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

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