我遇到了一些问题,我试图在包含子串存在的行之后提取行。
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
感谢任何帮助。
答案 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