首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python条件正则表达式

Python条件正则表达式
EN

Stack Overflow用户
提问于 2019-05-29 01:33:31
回答 2查看 72关注 0票数 3

我的程序被赋予了一个带有参数的对象,我需要获取这些参数的值。

我的程序所提供的对象将如下所示:

代码语言:javascript
复制
Object = """{{objectName|
parameter1=random text|
parameter2=that may or may not|
parameter3=contain any letter (well, almost)|
parameter4=this is some [[problem|problematic text]], Houston, we have a problem!|
otherParameters=(order of parameters is random, but their name is fixed)}}"""

(所有参数可能存在也可能不存在)

我正在尝试获取属性值。

在前3行中,它非常简单。一个简单的正则表达式就能找到它:

代码语言:javascript
复制
if "parameter1" in Object:
    parameter1 = re.split(r"parameter1=(.*?)[\|\}]", Object)[1]

if "parameter2" in Object:
    parameter2 = re.split(r"parameter2=(.*?)[\|\}]", Object)[1]

诸若此类。

问题出在parameter4,上面的正则表达式(property4=(.*?)[\|\}])将只返回this is some [[problem,因为正则表达式在竖线处停止。

现在是这样的:竖线只会作为文本的一部分出现在"[[]]“中。

例如,parameter1=a[[b|c]]d可能会出现,但parameter1=a|bc|永远不会出现。

我需要一个正则表达式,它将停止在垂直条,除非它是在双方括号内。例如,对于parameter4,我将获取this is some [[problem|problematic text]], Houston, we have a problem!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-05 03:09:51

显然,没有完美的解决方案。

对于将来可能阅读这个问题的其他读者,最接近的解决方案是parameter4=([^[}|]*(?:\[\[.*?]][^[}|]*)*),正如Wiktor Stribiżew在评论中指出的那样。

只有当参数文本不包含任何单个[}|,但可能包含[[...]]子字符串时,此正则表达式才有效。

如果您想更好地理解这个正则表达式,您可能需要查看这里:https://regex101.com/r/bWVvKg/2

票数 0
EN

Stack Overflow用户

发布于 2019-05-29 02:43:25

当我删除“?”时,我在这里工作:

代码语言:javascript
复制
parameter4 = re.split(r"parameter4=(.*)[\|\}]", object_)[1]

我还将变量的名称更改为"object_“,因为" object”是Python语言中的内置对象

最好的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56347432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档