在python

时间:2017-10-13 15:30:18

标签: 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

感谢任何帮助。

4 个答案:

答案 0 :(得分:1)

您希望逐行拆分字符串,并在每行中搜索您想要的字词。

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])

只要多行字符串在包含文本的最后一行之后的下一行结束,您就不会超出列表范围。如果您在"""旁边的上一行有Help me,那么您必须进行范围检查。

编辑:重新阅读问题。找到论坛后,您想要所有行吗?我之前给出的示例只是为您提供 next 行。对于找到关键字后的所有行,请使用:

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)

答案 1 :(得分:1)

试试这个,它适用于包含任意行数的字符串。

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,就像原始字符串中的情况一样)。

答案 2 :(得分:1)

具有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

答案 3 :(得分:1)

l = s.split('\n')
for n, str in enumerate(l):
    if 'forum' in str:
        print ('\n'.join(l[n:]))
        break

输出:

   This forum rocks
   Help me