我的文档如下所示:
{{ link.description | default text }}
{{ link.description |default text}}
如您所见,“默认文字”周围可能有也可能没有空格。我想使用python的re库使用以下代码提取文本“default text”:
default = re.findall('|[ ]*(.*?)[ ]*}}', doc)
不幸的是,我没有使用上面的正则表达式获得所需的结果。我试图使用(。*?)捕获“默认文本”,但它似乎没有工作。
答案 0 :(得分:2)
>>> st = '{{ link.description | default text }}'
>>> re.findall(r'\|\s*(.*?)\s*}',st)
['default text']
>>> st1 = '{{ link.description | default text }}'
>>> re.findall(r'\|\s*(.*?)\s*}',st1)
['default text']
>>>
在正则表达式中|[ ]*(.*?)[ ]*}}
。
1)你需要逃避|
。
2)\s*
white-space
使用{{1}}。
答案 1 :(得分:1)
你需要逃避|符号因为它在正则表达式中具有特殊含义(它表示替代匹配):
default = re.findall('\|[ ]*(.*?)[ ]*}}', doc)
答案 2 :(得分:0)
就个人而言,我不会将正则表达式用于这么简单的事情。
ldescrs = open(fname,"r")
for ln in ldescrs.readlines():
print ln.rstrip("{}\n").partition("|")[2].strip()
ln.strip("{}\n ")
清除附加到文件中每一行的换行符,以及任何空格或大括号
.partition("|")[2]
结果字符串在|
处被分解,我们得到元素2,这是默认文本。
.strip()
由于默认文本的左侧或右侧可能有空格,因此我们也会抛弃它们。从技术上讲,我们只需要留下条带,但如果您决定要分解链接descr关键字(分区结果的元素0),则更改一件事。那个人可能在右边有额外的空间。
你有一个完整的工具箱,为什么当一把带有正确钻头的螺丝刀能够完成工作时,可以使用手提钻?