Python Regex:如何将找到的字符串拆分为列表元素?

问题描述

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

org.gradle.jvmargs=-Xmx**JVM_HEAP_SIZE**M
org.gradle.parallel=true
android.enableR8=**MINIFY_WITH_R_EIGHT**
**ADDITIONAL_PROPERTIES**

android.useAndroidX = true // I added this property to fix error:  This project uses AndroidX dependencies,but the 'android.useAndroidX' property is not enabled. Set this property to true in the gradle.properties file and retry.

这是我到目前为止所得到的:

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

这是输出:

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

似乎返回了1个单个列表元素,这很明显,因为正则表达式匹配此字符串。 在创建列表之前,是否可以在正则表达式中用\ n分隔,所以列表将返回多个元素,如下所示:

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

不同oid的数量是动态的,所以我恐怕不能与捕获组一起工作了,可以吗?是否有python或正则表达式方式来处理此问题? 欢呼

解决方法

您可以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个或多个字符,然后是}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...