Python从一行中读取某些文本

Python从一行中读取某些文本,python,regex,Python,Regex,所以我想用Python“抓取”文本文件的某个部分,而你只知道这个特定文本前后的内容。我想要一个类似于答案的答案,但只需要一行。例如,如果我有一个名为test.txt的文本文件,它看起来像: This is my test file 那我可以用 with open('test.txt') as input_data: for line in input_data: if line.strip() == 'is': break fo

所以我想用Python“抓取”文本文件的某个部分,而你只知道这个特定文本前后的内容。我想要一个类似于答案的答案,但只需要一行。例如,如果我有一个名为
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) 
…这对于抓取
我的
很好,但是如果我的文本文件是单行,例如:

This is my test file
那就不行了。我不想通过字符串索引获取
my
,因为我想要的东西只能在知道行的前、后部分的基础上工作。我试着看了很多问题,但没有发现任何问题


谢谢大家!

您可以通过正则表达式获得:

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))
第三行查找带有“is test”的模式,如果找到,它将首先打印整行,然后只打印“is”和“my”之间的字符串。我不知道你喜欢哪一个


编辑:将正则表达式更改为在“is”之前包含空格,否则“This”也会匹配。删除了lookahead和lookahead,因为这是不必要的

您可以通过正则表达式获得:

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))
第三行查找带有“is test”的模式,如果找到,它将首先打印整行,然后只打印“is”和“my”之间的字符串。我不知道你喜欢哪一个


编辑:将正则表达式更改为在“is”之前包含空格,否则“This”也会匹配。删除“前瞻”和“后置”,因为不必要的

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

$ 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 open('testfile') as f:
...     re.findall(r'\bis\s+(.*?)\s+test\b', f.read())
... 
['my', 'your']

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

$ 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 open('testfile') as f:
...     re.findall(r'\bis\s+(.*?)\s+test\b', f.read())
... 
['my', 'your']
您可以使用
索引
查找起始词和结束词,然后获取子字符串


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

如果您想在“is”和“test”之间获取一些信息,则正则表达式可能会帮助您,如下所示:

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

看起来您想在“is”和“test”之间获取一些信息,那么正则表达式可能会帮助您,如下所示:

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

我认为OP是在寻找两个字符串之间的内容,比如
is
test
my
是可以变化的。感谢您澄清@TigerhawkT3我将编辑问题以指定打印匹配。组(
1
)?谢谢,编辑了正则表达式并删除了第一个捕获组,但没有调整打印语句。我正要说我遇到了一个错误,但@Hooting带来了修复,你们太棒了!非常感谢。我认为OP是在寻找两个字符串之间的内容,比如
is
test
my
是可以变化的。感谢您澄清@TigerhawkT3我将编辑问题以指定打印匹配。组(
1
)?谢谢,编辑了正则表达式并删除了第一个捕获组,但没有调整打印语句。我正要说我遇到了一个错误,但@Hooting带来了修复,你们太棒了!非常感谢。