我的程序被赋予了带有参数的对象,我需要获取参数的值。
程序给出的对象将如下所示:
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!
答案 0 :(得分:0)
当我删除“?”时在这里工作:
parameter4 = re.split(r"parameter4=(.*)[\|\}]", object_)[1]
我也将变量名更改为“ object_”,因为“ object”是Python中的内置对象
最好。
答案 1 :(得分:0)
显然,没有完美的解决方案。
Wiktor Stribiewew在评论中指出,对于将来可能会阅读此问题的其他读者,最接近的解决方案是parameter4=([^[}|]*(?:\[\[.*?]][^[}|]*)*)
。
仅当参数文本不包含任何单个[
,}
和|
但可以包含[[...]]
子字符串时,此正则表达式才有效。
如果您想更好地了解此正则表达式,可以在这里看看:https://regex101.com/r/bWVvKg/2