如何在Python中查找选择整行以仅查找该行中的子字符串
例如,我的文件中有以下行:如何在Python中查找选择整行以仅查找该行中的子字符串,python,regex,Python,Regex,例如,我的文件中有以下行: 汤姆是个男人 莎拉是个女人 亚历克斯也是一个男人 我想搜索“莎拉”,但想返回整个像 def findLine(self, str): ... 当我调用findLine(“Sara”),它返回“2.Sara是个女人” 如何使用Python和正则表达式(或其他非正则表达式方法)实现这一点?我将str重命名为content参见senderle的评论 def findLine(self, content, search_str): for line in
def findLine(self, str):
...
当我调用findLine(“Sara”)
,它返回“2.Sara是个女人”
如何使用Python和正则表达式(或其他非正则表达式方法)实现这一点?我将
str
重命名为content
参见senderle的评论
def findLine(self, content, search_str):
for line in content.splitlines()
if search_str in line:
return line
#or something else because the search_str was not found
return None
或者如果你想要一个包含sarah的所有行的列表
def findLine(self, str, search_str):
return [x for x in str.splitlines() if search_str in x]
search\u str
是您想要查找的字符串。我将str
重命名为content
请参见senderle的评论
def findLine(self, content, search_str):
for line in content.splitlines()
if search_str in line:
return line
#or something else because the search_str was not found
return None
def findline(filename, search_string):
with open(filename, 'r') as infile:
for line in infile:
if search_string in line:
return line
else:
return None
或者如果你想要一个包含sarah的所有行的列表
def findLine(self, str, search_str):
return [x for x in str.splitlines() if search_str in x]
search\u str
是您想要查找的字符串。您不需要正则表达式来执行此操作。您可以使用file.readline()并检查该行是否包含“Sara”。如果有,请返回该行。使用for each循环检查文件中的每一行
def findline(filename, search_string):
with open(filename, 'r') as infile:
for line in infile:
if search_string in line:
return line
else:
return None
编辑:
def findlines(filename, searchterm):
lines = []
line = filename.readline()
while line:
if searchterm in line:
lines.append(line)
line = filename.readline()
return lines
你不需要正则表达式来做这件事。您可以使用file.readline()并检查该行是否包含“Sara”。如果有,请返回该行。使用for each循环检查文件中的每一行 编辑:
def findlines(filename, searchterm):
lines = []
line = filename.readline()
while line:
if searchterm in line:
lines.append(line)
line = filename.readline()
return lines
您不需要正则表达式:
def findline(search_string, file_name, offset=0):
with open(file_name, 'r') as infile:
infile.seek(offset)
for line in infile
if search_string in line:
return line
(以上事实上只是其他函数的组合,并添加了file_name作为函数param和offset,这意味着您现在可以遍历文件并获得所搜索字符串的多个引用)。好吧,您不需要正则表达式:
def findline(search_string, file_name, offset=0):
with open(file_name, 'r') as infile:
infile.seek(offset)
for line in infile
if search_string in line:
return line
(上述内容实际上只是其他内容的组合,并添加了file_name作为函数param和offset,这意味着您现在可以遍历文件并获得所搜索字符串的多个引用)。但是“str”包含文件的全部内容。@Scott:好的。我改变了我的回答,最好不要使用
str
,因为它掩盖了一个内置的,如果照字面理解的话。@GWW不要吹毛求疵,但它应该是“Sara”
。。。就我个人而言,我会把它作为一个参数传入。而且,这个函数似乎只会搜索文件中的一行。(注意return
语句的位置。)但是“str”包含了文件的全部内容。@Scott:好的。我改变了我的回答,最好不要使用str
,因为它掩盖了一个内置的,如果照字面理解的话。@GWW不要吹毛求疵,但它应该是“Sara”
。。。就我个人而言,我会把它作为一个参数传入。而且,这个函数似乎只会搜索文件中的一行。(注意return
语句的位置。)您不需要'r'
或with
语句。Python的GC关闭file@Franklin,'r'
与或GC无关。它确定文件的模式。模式总是可选的;省略时,假定'r'
。但是,全世界每个人都知道打开文件的默认方式是read
。哈哈,发件人。我不认为富兰克林想让人觉得'r'
和与语句有关联。只是它们都不是必需的。@布莱斯,你是对的,我误解了富兰克林的评论。谢谢您不需要'r'
或with
语句。Python的GC关闭file@Franklin,'r'
与或GC无关。它确定文件的模式。模式总是可选的;省略时,假定'r'
。但是,全世界每个人都知道打开文件的默认方式是read
。哈哈,发件人。我不认为富兰克林想让人觉得'r'
和与语句有关联。只是它们都不是必需的。@布莱斯,你是对的,我误解了富兰克林的评论。谢谢