如何在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'
    语句有关联。只是它们都不是必需的。@布莱斯,你是对的,我误解了富兰克林的评论。谢谢