首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
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
V2EX  ›  Python

问个正则

  •  
  •   imn1 · 10 天前 · 829 次点击
    string "[123]...(abc)"
    需要将“ 123 ”提取到 key1,"abc"提取到 key2,(?<key1>)方式

    问题是
    [] 和 () 出现的顺序不确定,也可能是
    string "(abc)...[123]"

    能否一条正则搞定?
    第 1 条附言  ·  10 天前
    脑子秀逗了,忘了 findall 一个很重要的设定:
    findall 的输出是按 pattern 中分组的顺序,而不是 string 中匹配出现的顺序

    m=re.findall(r"(\{([a-z]+)\})|(\[([0-9]+)\])|(\(([a-z]+)\))", "(ace).[92387492].{abc}")

    m
    Out[24]:
    [('', '', '', '', '(ace)', 'ace'),
    ('', '', '[92387492]', '92387492', '', ''),
    ('{abc}', 'abc', '', '', '', '')]

    按照结果每个 tuple 的 index 读取就可以了
    7 回复  |  直到 2018-07-17 12:46:33 +08:00
        1
    wizardoz   10 天前   ♥ 1
    "\[(?P<key1>[0-9]+)\].+\((?P<key2>[a-z]+)\)"
        2
    imn1   10 天前
    @wizardoz
    你应该没看完问题
        3
    zynlp   10 天前 via iPhone   ♥ 1
    会不会有嵌套的情况呢?
        4
    rocketman13   8 天前
    正则我要提取或者替换的的文本中既有双引号也有单引号,那我概括选中这段文本时是不是要用三引号??
        5
    imn1   8 天前
    @rocketman13
    你干吗不自己发个帖问啊?

    不需要,用转义就可以了,\' or \" 视乎外面用哪个
        6
    rocketman13   7 天前
    @imn1 可以的
        7
    frostming   6 天前
    (?=.*?(\[.+?\]))(?=.*?(\(.+?\))).+?
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   实用小工具   ·   3225 人在线   最高记录 3762   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 21ms · UTC 07:58 · PVG 15:58 · LAX 00:58 · JFK 03:58
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1