Python正则表达式:如何将找到的字符串拆分为列表元素?

2024-06-12 03:14:05 发布

您现在位置:Python中文网/ 问答频道 /正文

由于re.findall返回一个列表,我一直在尝试将使用regex找到的字符串拆分为列表元素。 这是我的源字符串:

vars.duh["1"] = {
   oid_1 = "1"
   oid_2 = "2"
   oid_3 = "3"
}

到目前为止,我得到的是:

regex = re.compile(r"(?<=vars\.duh\[\"1\"\] = {)[^}]*(?=})")
return re.findall(regex, string)

这是输出:

['\n    oid_1 = "1"\n    oid_2 = "2"\n    oid_3 = "3"\n']

似乎返回了一个列表元素,这是显而易见的,因为正则表达式匹配这一个字符串。 在创建列表之前,是否可以在正则表达式中按\n拆分,以便列表返回多个元素,如下所示:

['    oid_1 = "1"','    oid_2 = "2"','    oid_3 = "3"']

不同OID的数量是动态的,所以我恐怕不能与捕获组一起工作,对吗?有python或regex方法来处理这个问题吗? 干杯


Tags: 字符串re元素列表数量stringreturn动态
1条回答
网友
1楼 · 发布于 2024-06-12 03:14:05

您可以pip install regex然后使用

import regex
s = r"""vars.duh["1"] = {
   oid_1 = "1"
   oid_2 = "2"
   oid_3 = "3"
}"""
rx = regex.compile(r'(?<=vars\.duh\["1"] = {[^}]*?)[^}\n]+(?=[^}]*})')
print (rx.findall(s))
# => ['    oid_1 = "1"', '   oid_2 = "2"', '   oid_3 = "3"']

Python demo

正则表达式详细信息

  • (?<=vars\.duh\["1"] = {[^}]*?)-前面紧跟着vars.duh["1"] = {字符串的位置,然后是尽可能少的}以外的任何0个或更多字符
  • [^}\n]+-1个或多个字符,而不是}和换行符
  • (?=[^}]*})-一个位置后面紧跟着除}以外的任何0个或多个字符,然后是}

相关问题 更多 >