python正则表达式中匹配字符@开头的单词,出错

fzyz_sb 发布于 2013/08/24 15:27
阅读 1K+
收藏 0

我要匹配以@开头的单词,在《python标准库》P39中的例子,但是我自己写了一个类似的表达式,结果出错。

#1 twitter = re.compile(r'\b@([\w\d_]+)', re.UNICODE | re.VERBOSE)
   #2 twitter = re.compile(r'(?<=@)([\w\d_]+)', re.UNICODE | re.VERBOSE)
    text = u'hello world @this world'
    match = twitter.search(text)
    if match:
        print text[match.start():match.end()]
    else:
        print 'no match'
其中#1是我写的代码,#2是书上的代码,可以正确搜索出 @this ,但是为什么简单的\b@\w+就不能搜索出来呢?

加载中
0
伊藤熊吉
伊藤熊吉
\b 匹配单词的开始或结束 \b@\w+ 是匹配,asdf@sdf 这样的字符串 他的要求是@的前面要有字符串才可以,前面不能是空格,我说也说得不是太明白,osc在线工具有个正则测试,多试两遍就明白了
fzyz_sb
fzyz_sb
回复 @伊藤熊吉 : 对哦,@不是单词字符。哦,谢谢了,刚才还在纠结呢。
伊藤熊吉
伊藤熊吉
回复 @雷朝建 : 注意 @符号不是单词字符
伊藤熊吉
伊藤熊吉
回复 @雷朝建 : “\b”表示所在位置的一侧为单词字符,另一侧为非单词字符、字符串的开始或结束位置 \b@ 就是匹配,@的左边为\w 右侧为字符结束的,放在后面就是 匹配@后面是\w 前面是开始和结束
fzyz_sb
fzyz_sb
貌似还是不太明白,因为我\bt\w+也可以匹配以t开头的单词,但是就不能匹配以@开头的单词。不过还是谢谢你,^_^
0
伊藤熊吉
伊藤熊吉
换种说法吧,\b@ 匹配 sss@ 是可以的   @\b 匹配 @sss 是可以的,但是换一下就不行了,这样说你明白了么...
0
d
derekm

text = u'hello world @this world'

>>> c = r"(?<=@)(.+?)(?=\ )"

>>> re.findall(c,text)

[u'this']

这个正则专找@后面跟>1个非空格字符的 字符串,比如说 this


fzyz_sb
fzyz_sb
谢谢啦^_^
返回顶部
顶部