[英]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.