Python从一行读取某些文本

时间:2015-11-23 02:28:04

标签: python regex

所以我正在寻找方法来抓住"使用Python的文本文件的某个部分,当您只知道此特定文本之前和之后的内容时 。我想要像this这样的回答但是对于单行来说。例如,如果我有一个名为test.txt的文本文件,如下所示:

This 
is 
my 
test 
file

然后我可以使用

with open('test.txt') as input_data:
    for line in input_data:
        if line.strip() == 'is': 
            break
    for line in input_data: 
        if line.strip() == 'test':
            break
        print(line) 

...这对于抓取my很好,但是如果我的文本文件是一行,例如:

This is my test file

然后它不起作用。我不想通过字符串索引获取my,因为我想要的东西只能基于知道该部分之前和之后的内容。我试着看了很多问题,但没找到任何东西。

谢谢!

4 个答案:

答案 0 :(得分:2)

你可以用正则表达式得到它:

with open('test.txt') as input_data:
    for line in input_data:
       match = re.search(r' is (.*) test ', line)
       if match:
          print(line)
          print(match.group(1))

第3行查找带有“is test”的模式,如果找到,它将首先打印整行,然后只打印“is”和“my”之间的字符串。我不确定你更喜欢哪一个。

编辑:更改正则表达式以包含“是”之前的空格,否则“此”也将匹配。由于没有必要,删除了前瞻和后瞻

答案 1 :(得分:1)

start = ' is '
end = ' test '
with open('test.txt') as input_data:
    for line in input_data:
        try:
            start_index = line.index(start) + len(start)
            end_index = line.index(end)
            print line[start_index:end_index]
        except ValueError:
            print "not find in this line[%s]" % line.rstrip()

您可以使用index查找起始字和结束字,然后获取子字符串

答案 2 :(得分:1)

看起来你想在" is"之间获取一些信息。并且"测试",然后正则表达式可以帮助你,像这样:

with open('test.txt') as input_data:
   match = re.findall(r'\sis\s*(\w[\s\S]+?)\s*test', input_data.read())
       for item in match:
           print item

答案 3 :(得分:0)

让我们考虑一下这个测试文件:

$ cat testfile
This                                                                                                                                                                                            
is                                                                                                                                                                                              
my                                                                                                                                                                                              
test                                                                                                                                                                                            
file                                                                                                                                                                                            
this is your test file   

获得两场比赛:

>>> import re
>>> re.findall(r'\bis\s+(.*?)\s+test\b', open('testfile').read())
['my', 'your']

如果我们想要确保文件已关闭,请务必使用with

>>> with open('testfile') as f:
...     re.findall(r'\bis\s+(.*?)\s+test\b', f.read())
... 
['my', 'your']