Python文档中关于正则表达式“\b”的错误?

2024-03-29 08:37:55 发布

您现在位置:Python中文网/ 问答频道 /正文

由于得到了我昨天提出的一个问题的帮助-Python 2.7 - find and replace from text file, using dictionary, to new text file-我今天开始学习正则表达式,以理解@Blckknght在他的回答中善意地为我创建的正则表达式代码。在

然而,在我看来,python文档(或者更可能是我)对于\b代码有点不正确。我在python文档中提到的有关\b的部分是:

For example, r'\bfoo\b' matches 'foo', 'foo.', '(foo)', 'bar foo baz' but not 'foobar' or '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()

…然后我从控制台得到这个结果:

^{pr2}$

。。。而不是

'bar foo baz'

实际上,根据python文档中关于'\b'的其余解释,我实际上希望'foo'打印到控制台,因为它匹配单词开头和结尾的空字符串。在

那么,python文档中'bar foo baz'是匹配的是什么呢?在

编辑:我使用的是python2.7


Tags: and代码textfrom文档redictionaryfoo
1条回答
网友
1楼 · 发布于 2024-03-29 08:37:55

I would actually expect 'foo' to print to the console since it matches the empty string at the beginning and the end of a word.

你的意思是写' foo ',每端都有空格吗?它不能捕获空格,因为\b匹配字符之间的转换,空格,而不是字符本身。在


一些关于regex工作方式的漫谈

regex系统将字符串视为一个“令牌”流,其中令牌和文本文件中的字符之间存在而不是的1:1关系。像\bfoo\b这样的表达式只是为一个像吃东西的Pac-Man这样的机器人编写规则的超短方法。在

例如,假设我们有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. 告诉我你肚子里有什么。在

显然,你可以在上面加上更多的复杂性,比如循环(+*?)和速记(比如\w代表“abc或……”),或者它如何有选择地忽略一些标记,但希望基本样式得以揭示。在

所以。。。我现在可以解析HTML/XML吗?在

简短的回答?不,pacman只对一行行的内容进行操作,但是XML就像一棵树。吃豆人必须在某些地方停下来,雇一些吃豆的人为他探索(他们有自己不同的规则),然后汇报。那些分包商也会有自己的分包商。。。在

不管怎么说,吃豆人的人在生活在一个不可避免的充满了致命的鬼魂和兴奋剂的迷宫后,他的人际交往能力受到了阻碍。在Pac公司,你不可能走得很远,因为你只能说Wakka。在

相关问题 更多 >