Python - 如何查找和保存两个特定字符串之间的所有单词

时间:2013-03-07 10:59:47

标签: python regex string search

在搜索时我发现了threat。这很安静,接近我的需要。

直接导致我的第一个问题:

我的字符串是:

line = <draw:line draw:style-name="gr1" draw:text-style-name="P1" draw:layer="layout" svg:x1="0cm" svg:y1="0cm" svg:x2="3.5cm" svg:y2="2.7cm">

我需要在svg:x1 =标签之后提取值。所以我试过

print re.findall(r"(?<=svg:x1) (.*?) (?=svg:y1)", line)

但是除了[]之外什么都没有打印。

第二个问题是我尝试了类似

的东西
line = 'string1 string2 string3'

然后

print re.findall(r"(?<=string1) (.*?) (?=string3)", line)

给出我想要的东西,但是当我尝试

file.write(re.findall(r"(?<=string1) (.*?) (?=string3)", line))

(我想写的文件当然是之前定义的,所以我可以写东西)

我得到“TypeError:期望一个字符缓冲区对象”

所以现在我的问题在一个完整的句子:) 如何在特定字符串之间提取字符串并将其保存在文件中?

3 个答案:

答案 0 :(得分:2)

以下正则表达式

print re.findall(r"(?<=svg:x1) (.*?) (?=svg:y1)", line)

你写的在svg:x1之后需要一个空格,而原始字符串中不是这种情况。正确的正则表达式是

print re.findall(r"(?<=svg:x1)(.*?)(?= svg:y1)", line)

您编写的正则表达式返回一个列表。您必须迭代列表才能将项目写入文件。

data=re.findall(r"(?<=svg:x1)(.*?)(?= svg:y1)", line)
fl.write(' '.join(data))

不要将file用作变量。它是Python中的保留字。

答案 1 :(得分:0)

你可以在没有正则表达式的情况下做到这一点。

def get_middle_text(line, string_start, string_end):
    temp = line.split(string_start)[1]
    return temp.split(string_end)[0]


result = get_middle_text(line, 'string1', 'string2')

编辑:

如果您可以进行多项匹配,则可以执行以下操作,并返回匹配字段:

def get_middle_text(line, string_start, string_end):
    tmp = line.split(string_start)
    result = []
    if len(tmp) == 1:
        return result
    for x in range(1, len(tmp)):
        temp = tmp[x].split(string_end)[0]
        result.append(temp)
    return result

答案 2 :(得分:0)

这是你想要的吗?

In [10]: re.findall('svg:x1="([^"]*)"', line)
Out[10]: ['0cm']

编辑:

re.findall('svg:x1="(\d*)cm"', line)

In [11]: re.findall('svg:x1="(\d*)cm"', line)
Out[11]: ['0']