在python中提取所有行,包括包含子字符串的行和子字符串后的行

在python中提取所有行,包括包含子字符串的行和子字符串后的行,python,Python,我遇到了一些问题,在包含子字符串所在的行之后,我试图提取这些行 s=""" This is so awesome I need to do this more often This forum rocks Help me """ 如果我搜索的子字符串是论坛,我希望得到如下结果: this forum rocks Help me 我试着使用下面的语句 s.lower().split("forum",1)[1] 我的输出是 forum rocks 非常

我遇到了一些问题,在包含子字符串所在的行之后,我试图提取这些行

s="""
   This is so awesome
   I need to do this more often
   This forum rocks
   Help me
  """
如果我搜索的子字符串是论坛,我希望得到如下结果:

   this forum rocks
   Help me
我试着使用下面的语句

s.lower().split("forum",1)[1]
我的输出是

forum rocks

非常感谢您的帮助。

您需要将字符串逐行拆分,并在每行中搜索所需的单词

s="""
This is so awesome
I need to do this more often
This forum rocks
Help me
""".split('\n')
for line in range(len(s)):
    if "forum" in s[line]:
        print(s[line])
        print(s[line+1])
只要多行字符串在最后一行之后的下一行结束,并且其中包含文本,就不会超出列表的范围。如果您在上一行的“帮助我”旁边有最后一个
,则必须进行范围检查

编辑:重新阅读问题。你想在找到单词forum后阅读所有行吗?我前面给出的示例只是让你阅读下一行。对于找到关键字后的所有行,请使用以下命令:

s="""
This is so awesome
I need to do this more often
This forum rocks
Help me
""".split('\n')
found = False
for line in range(len(s-1)):
    if "forum" in s[line] or found:
        print(s[line])
        found = True

len(s-1)
部分是可选的。这取决于您是否希望结果中包含尾随的空行。如果您希望最后一个空行,只需将其更改回
len(s)
即可。您需要将字符串逐行拆分,并在每行中搜索所需的单词

s="""
This is so awesome
I need to do this more often
This forum rocks
Help me
""".split('\n')
for line in range(len(s)):
    if "forum" in s[line]:
        print(s[line])
        print(s[line+1])
只要多行字符串在最后一行之后的下一行结束,并且包含文本,您就不会超出列表的范围。如果您在上一行的“帮助我”旁边有最后一个
,则必须进行范围检查

编辑:重读问题。你想在找到“论坛”这个词后再看所有的行吗?我前面的例子只是让你了解下一行。对于找到关键字后的所有行,请使用以下命令:

s="""
This is so awesome
I need to do this more often
This forum rocks
Help me
""".split('\n')
found = False
for line in range(len(s-1)):
    if "forum" in s[line] or found:
        print(s[line])
        found = True

len(s-1)
部件是可选的。取决于是否要在结果中包含尾随空行。如果您想要最后一个空行,只需将其更改回
len(s)

尝试此操作,它将适用于包含任意行数的字符串

s="""
   This is so awesome
   I need to do this more often
   This forum rocks
   Help me
  """
s=s.split('\n')
c=0
for i in s:
    if i.find("forum")!=-1: #  no match, find returns -1
        print "\n".join(s[c:])
    c+=1
输出:

This forum rocks
Help me

因此,基本上,您可以在找到匹配项的数组中找到索引,然后返回之后的所有内容(与原始字符串一样,使用
\n
连接)。

尝试此操作,它将适用于包含任意行数的字符串

s="""
   This is so awesome
   I need to do this more often
   This forum rocks
   Help me
  """
s=s.split('\n')
c=0
for i in s:
    if i.find("forum")!=-1: #  no match, find returns -1
        print "\n".join(s[c:])
    c+=1
输出:

This forum rocks
Help me

因此,基本上,您可以在找到匹配项的数组中找到索引,然后返回之后的所有内容(与原始字符串一样使用
\n
连接)。

使用
re.search()函数的单行解决方案:

import re

s="""
   This is so awesome
   I need to do this more often
   This forum rocks
   Help me
  """    
result = re.search(r'.*\bforum[\s\S]*', s, re.M).group()
print(result)
输出:

   This forum rocks
   Help me

具有
re.search()
功能的单行解决方案:

import re

s="""
   This is so awesome
   I need to do this more often
   This forum rocks
   Help me
  """    
result = re.search(r'.*\bforum[\s\S]*', s, re.M).group()
print(result)
输出:

   This forum rocks
   Help me
输出:

   This forum rocks
   Help me
输出:

   This forum rocks
   Help me

提示:首先,尝试查找包含单词forum的行。这些行中是否有隐藏的
'\n'
?提示:首先,尝试查找包含单词forum的行。这些行中是否有隐藏的
'\n'
?根据您的回答,此解决方案是否也用于在“forum”行之前剪切文本?我现在正试图提取包含“论坛”一词的行上方的行。示例-输出仅包含“这太棒了,我需要更频繁地执行此操作”@ayushman999,使用此
result=re.search(r'(.*)(?=\n.*\b格式[\s\s]*),s,re.M | re.s)。根据您的答案,组(1)
是否也可以使用此解决方案在“论坛”一行之前剪切文本?我现在正试图提取包含“论坛”一词的行上方的行。示例-输出仅包含“这太棒了,我需要更频繁地执行此操作”@ayushman999,使用此
result=re.search(r'(.*)(?=\n.*\b格式[\s\s]*),s,re.M | re.s)。组(1)