两个正则表达式函数一起不起作用

时间:2014-09-14 12:25:04

标签: python regex

我正在尝试获取标记开头的索引和另一个标记的结尾。但是,当我使用一个正则表达式时它工作得非常好但是对于两个正则表达式函数,它会给第二个正则函数带来错误。 请帮助解释原因

以下代码可以正常使用:

import re
f = open('C:/Users/Jyoti/Desktop/PythonPrograms/try.xml','r')
opentag = re.search('<TEXT>',f.read())
begin = opentag.start()+6
print begin

但是当我添加另一个类似的正则表达式时,它会给我错误

AttributeError: 'NoneType' object has no attribute 'start'

我理解是由于start()函数返回None

以下是代码:

import re
f = open('C:/Users/Jyoti/Desktop/PythonPrograms/try.xml','r')
opentag = re.search('<TEXT>',f.read())
begin = opentag.start()+6
print begin

closetag = re.search('</TEXT>',f.read())
end = closetag.start() - 1
print end

请提供解决方案,了解如何使其正常运行。我也是新手,所以如果我对解决方案提出更多问题,请不要介意。

3 个答案:

答案 0 :(得分:1)

您正在阅读f.read()中的文件,该文件读取整个文件,因此文件描述符向前移动,这意味着当您f.read()下一个文件时,文本无法再次读取时间。

如果您需要再次搜索同一文本,请保存f.read()的输出,然后对其执行正则表达式搜索,如下所示:

import re
f = open('C:/Users/Jyoti/Desktop/PythonPrograms/try.xml','r')

text = f.read()

opentag = re.search('<TEXT>',text)
begin = opentag.start()+6
print begin

closetag = re.search('</TEXT>',text)
end = closetag.start() - 1
print end

答案 1 :(得分:1)

f.read()读取整个文件。因此,在第二次f.read()电话中没有任何内容可供阅读。 见https://docs.python.org/2/tutorial/inputoutput.html#methods-of-file-objects

答案 2 :(得分:1)

首先,你必须知道读取文件后f.read()将指针设置为EOF,所以如果你再次使用f.read(),它会给你空字符串''。其次,你应该在字符串传递之前使用r作为re.search函数的模式,这意味着raw,并自动转义特殊字符。所以你必须做这样的事情:

import re
f = open('C:/Users/Jyoti/Desktop/PythonPrograms/try.xml','r')
data = f.read()
opentag = re.search(r'<TEXT>',data)
begin = opentag.start()+6
print begin

closetag = re.search(r'</TEXT>',data)
end = closetag.start() - 1
print end
&p> gl&amp; hf with Python:)