Python - 如何找到并保存两个特定字符串之间的所有单词
在搜索的时候,我发现了这个帖子。这个内容跟我需要的很接近。
这直接引出了我的第一个问题:
我现在有的字符串是:
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']