从字符串中间提取文本

时间:2012-03-01 00:18:33

标签: python regex

我的文档如下所示:

{{ link.description | default text }}
{{ link.description |default text}}

如您所见,“默认文字”周围可能有也可能没有空格。我想使用python的re库使用以下代码提取文本“default text”:

default = re.findall('|[ ]*(.*?)[ ]*}}', doc)

不幸的是,我没有使用上面的正则表达式获得所需的结果。我试图使用(。*?)捕获“默认文本”,但它似乎没有工作。

3 个答案:

答案 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),则更改一件事。那个人可能在右边有额外的空间。

你有一个完整的工具箱,为什么当一把带有正确钻头的螺丝刀能够完成工作时,可以使用手提钻?