V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
muzzy
V2EX  ›  Python

r'[a-zA-Z]+(\'[a-zA-Z]+|\b)' 有这么一条正则表达式匹配单词个数,最后那个‘|’理解不了。 哪位可以帮忙解释下

  •  
  •   muzzy · 2015-09-16 15:43:26 +08:00 · 3919 次点击
    这是一个创建于 3358 天前的主题,其中的信息可能已经有所发展或是发生改变。
    14 条回复    2015-09-17 10:28:00 +08:00
    xjx0524
        1
    xjx0524  
       2015-09-16 16:19:02 +08:00
    \b 匹配单词边界
    | 表示括号里两种情况是 或 的关系

    比如 I 和 I'm
    caixiexin
        2
    caixiexin  
       2015-09-16 16:47:37 +08:00
    匹配的应该是类似
    aBc
    aBc
    这两种情况,第二个末尾比第一个多一个空格
    imn1
        3
    imn1  
       2015-09-16 17:16:17 +08:00
    it is 'new year'
    it's 'new year'
    muzzy
        4
    muzzy  
    OP
       2015-09-16 17:42:22 +08:00
    @xjx0524 表示括号里面的两个是或关系的话,一句话的结尾用.结束,那最后一个单词是怎么匹配到的呢。[a-zA-Z]这个与(\'[a-zA-Z]+|\b ) 也是或的关系?
    staticor
        5
    staticor  
       2015-09-16 17:50:07 +08:00
    @muzzy 只用考虑一个单词的结尾之后跟的是 单引号 或非单引号(即 ' & \b )
    rock_cloud
        6
    rock_cloud  
       2015-09-16 17:51:56 +08:00
    给楼主推荐一个网站 https://regex101.com/
    虽然是机器解释的,不过还可以看
    jadecoder
        7
    jadecoder  
       2015-09-16 18:07:23 +08:00
    匹配 单引号+字母 或者 单词边界
    theFool
        8
    theFool  
       2015-09-16 18:08:38 +08:00
    跟楼上顺路贴一个
    http://regexper.com/
    不过是 js 的。
    Biwood
        9
    Biwood  
       2015-09-16 18:40:40 +08:00   ❤️ 1
    ① [a-zA-Z]+: 匹配所有大小写字母

    ② [a-zA-Z]+(\b ):在①的所有匹配结果中匹配一个单词边界

    ③ [a-zA-Z]+(\'[a-zA-Z]+|\b ):由于 \b 会把 "it's" 这种情况当成两个单词,所有优先使用 \'[a-zA-Z]+ 进行匹配,若匹配失败,再使用 \b 进行匹配
    Biwood
        10
    Biwood  
       2015-09-16 18:43:17 +08:00
    接楼上,①应该是匹配连续的、一个或一个以上的大小写字母,所有 "it's" 被分成了两个
    xjx0524
        11
    xjx0524  
       2015-09-16 20:32:15 +08:00
    @muzzy 你这个可以看成 ①(②|③) 的形式,匹配 ①②(单词加单词边界)或者 ①③(单词加'加单词)

    你说的句尾有.的情况,应该是 ①② 这种形式,句点不会匹配进去
    xjx0524
        12
    xjx0524  
       2015-09-16 20:32:57 +08:00   ❤️ 1
    @xjx0524 抱歉说反了 应该是 ①②(单词加'加单词)或者 ①③(单词加单词边界)
    ljbha007
        13
    ljbha007  
       2015-09-16 20:35:35 +08:00
    表示 小组内的或关系
    Biwood
        14
    Biwood  
       2015-09-17 10:28:00 +08:00
    抱歉的跟楼主说一声,我在 9 楼和 10 楼的分析是错误的。

    [a-zA-Z]+(\'[a-zA-Z]+|\b ) 这个表达式可以用算术里的乘法分配律理解,相当于匹配 [a-zA-Z]+\'[a-zA-Z]+ 或 [a-zA-Z]+\b 这两种情况,是我想复杂了, sorry ,@xjx0524 的说法是正确的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4005 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 10:23 · PVG 18:23 · LAX 02:23 · JFK 05:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.