如何解决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个或多个字符,然后是}
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。