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