【问题标题】:Regex matches only a few elements from a list正则表达式仅匹配列表中的几个元素
【发布时间】:2013-04-16 15:17:51
【问题描述】:

这是一个 python-code-sn-p:

import re

VARS='Variables: "OUTPUTFOLDER=installers","SETUP_ORDER=Product 4,Product 4  Library","SUB_CONTENTS=Product 4 Library","SUB_CONTENT_SIZES=9364256","SUB_CONTENT_GROUPS=Product 4 Library","SUB_CONTENT_DESCRIPTIONS=","SUB_CONTENT_GROUP_DESCRIPTIONS=","SUB_DISCS=Product 4,Product Disc",SUB_FILENAMES='
comp = re.findall(r'\w+=".*?"', VARS)

for var in comp:
    print var

这是当前的输出:

SUB_CONTENT_DESCRIPTIONS="," 
SUB_CONTENT_GROUP_DESCRIPTIONS=","

但是我希望输出提取所有元素,使其看起来像这样:

"OUTPUTFOLDER=installers"
"SETUP_ORDER=Product 4, Product 4 Library"
"SUB_CONTENTS=Product 4"
"SUB_CONTENT_SIZES=9364256"
...

我的正则表达式有什么问题?

【问题讨论】:

  • 把双引号放在表达式外面:r'"\w+=.*?"'
  • 注意不需要正则表达式

标签: python regex python-2.6


【解决方案1】:

使用这个正则表达式:

r'"\w+?=.*?"'

我的和你的正则表达式之间的区别,你自己看看:

r'"\w+?=.*?"' # mine
r'\w+=".*?"' # your's

只有一个"

输出:

>>> regex = re.compile(r'"\w+?=.*?"')
>>> regex.findall(string)
[u'"OUTPUTFOLDER=installers"', u'"SETUP_ORDER=Product 4,Product 4 Library"',  
 u'"SUB_CONTENTS=Product 4 Library"', u'"SUB_CONTENT_SIZES=9364256"',
 u'"SUB_CONTENT_GROUPS=Product 4 Library"', u'"SUB_DISCS=Product 4,Product Disc"']

【讨论】:

  • 除非您实际使用regex 模块,否则将其更改为re
  • @jamylak regex 是编译的东西..会改变。
【解决方案2】:

你可以试试这个:

 comp = re.findall(r'"(.*?)"', VARS)
 print [x for x in comp]

大致上,您会以非贪婪的方式获得双引号内的任何内容。

【讨论】:

    【解决方案3】:

    使用这个正则表达式。

    comp = re.findall(r'"\w+=.*?"', VARS)
    

    结果:

    >>> 
    "OUTPUTFOLDER=installers"
    "SETUP_ORDER=Product 4,Product 4  Library"
    "SUB_CONTENTS=Product 4 Library"
    "SUB_CONTENT_SIZES=9364256"
    "SUB_CONTENT_GROUPS=Product 4 Library"
    "SUB_CONTENT_DESCRIPTIONS="
    "SUB_CONTENT_GROUP_DESCRIPTIONS="
    "SUB_DISCS=Product 4,Product Disc"
    

    在我看来,你可以用更聪明的方式做到这一点,并将你的“vars”存储在字典中。

    d = dict(var.strip('"').split('=') for var in re.findall(r'"\w+=.*?"', VARS))
    

    要查看字典:

    for k, v in d.items():
        print k, '=', (v if v else '<NONE>')
    

    结果:

    >>> 
    SETUP_ORDER = Product 4,Product 4  Library
    SUB_CONTENT_DESCRIPTIONS = <NONE>
    SUB_DISCS = Product 4,Product Disc
    SUB_CONTENT_GROUPS = Product 4 Library
    SUB_CONTENT_SIZES = 9364256
    SUB_CONTENT_GROUP_DESCRIPTIONS = <NONE>
    OUTPUTFOLDER = installers
    SUB_CONTENTS = Product 4 Library
    

    【讨论】:

    • 无需致电tuple
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 2011-04-21
    • 2016-08-14
    • 1970-01-01
    • 2018-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多