Python条件正则表达式

时间:2019-05-28 17:33:31

标签: python regex conditional-regex

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

程序给出的对象将如下所示:

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)}}"""

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

我正在尝试获取属性值。

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

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

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

以此类推。

问题出在参数4上,由于正则表达式停在竖线处,因此上述正则表达式(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!

2 个答案:

答案 0 :(得分:0)

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

parameter4 = re.split(r"parameter4=(.*)[\|\}]", object_)[1]

我也将变量名更改为“ object_”,因为“ object”是Python中的内置对象

最好。

答案 1 :(得分:0)

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

Wiktor Stribiewew在评论中指出,对于将来可能会阅读此问题的其他读者,最接近的解决方案是parameter4=([^[}|]*(?:\[\[.*?]][^[}|]*)*)

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

如果您想更好地了解此正则表达式,可以在这里看看:https://regex101.com/r/bWVvKg/2

相关问题