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

0 投票
3 回答
6455 浏览
提问于 2025-04-17 18:15

在搜索的时候,我发现了这个帖子。这个内容跟我需要的很接近。

这直接引出了我的第一个问题:

我现在有的字符串是:

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: expected a character buffer object”的错误。

所以现在我想问的一个完整的问题是:
我该如何提取两个特定字符串之间的内容,并把它保存到一个文件里呢?

3 个回答

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

你写的这个正则表达式

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 中是一个保留字。

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']

撰写回答