繁体   English   中英

需要帮助使用正则表达式从字符串中提取列表

[英]Need Help extracing a list from a string using regex

我在提取这两个列表时遇到了一些麻烦 '['item1', 'item2', 'item3'] ['item4', 'item5']' 这是我尝试过的代码示例

import re

pattern_matcher = re.compile(r"(\[,\]])")

alien_string = "Offering ['item1', 'item2', 'item3'] (4331)[6785]    Requesting ['item4', 'item5'] (6998)[6766]. {0.255457} (0 left in queue)..."

matches = pattern_matcher.fullmatch(alien_string)

print(matches)

我收到的输出是

Output: None

我想知道如何从这个长字符串中提取这两个列表,特别是 ['item1', 'item2', 'item3'] 和 ['item4', 'item5']

import re

pattern = re.compile(r"\[[^\]]+?(?:, [^\]]+?)+\]")

alien_string = "Offering ['item1', 'item2', 'item3'] (4331)[6785]    Requesting ['item4', 'item5'] (6998)[6766]. {0.255457} (0 left in queue)..."

matches = re.findall(pattern, alien_string)

for match in matches:
    print(match)

结果:

['item1', 'item2', 'item3']
['item4', 'item5']

解释:

  • \[匹配第一个括号
  • [^\]]匹配任何不是封闭括号的东西
  • [^\]]*? 匹配可变数量的非括号字符,直到逗号
  • (?:启动一个非捕获组(用于findall

其余的应该是不言自明的。

您可以尝试拆分行并匹配每个部分:

import re
alien_string = "Offering ['item1', 'item2', 'item3'] (4331)[6785]    Requesting ['item4', 'item5'] (6998)[6766]. {0.255457} (0 left in queue)..."
parts = alien_string.split('    ')
lists = [re.search(r'(\[(.*?)\])', part).group(0) for part in parts]
print(lists)

输出

["['item1', 'item2', 'item3']", "['item4', 'item5']"]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM