簡體   English   中英

正則表達式僅匹配列表中的一些元素

[英]Regex matches only a few elements from a list

這是一個python代碼段:

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"
...

我的正則表達式模式有什么問題?

使用此正則表達式。

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

使用此正則表達式:

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"']

您可以嘗試以下方法:

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

大致上,您會以非貪婪的方式獲得雙引號中包含的所有內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM