如何找到选择整行来查找Python中的行中的子串

时间:2011-06-21 02:26:07

标签: python regex

示例,我在文件中有以下几行:

  
      
  1. 汤姆是个男人
  2.   
  3. 莎拉是个女人
  4.   
  5. Alex也是一个人
  6.   

我想搜索“Sara”,但想像

一样返回整个
   def findLine(self, str):
   ...

当我致电findLine("Sara")时,会返回"2. Sara is a woman"

如何使用Python和正则表达式(或其他非正则表达式方法)实现此目的

6 个答案:

答案 0 :(得分:5)

我将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_str是您想要找到的字符串。

答案 1 :(得分:2)

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

答案 2 :(得分:2)

您不需要RegEx来执行此操作。您可以使用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

答案 3 :(得分:1)

def find(name)
    for line in open('file.txt'):
        if name in line:
            return line

答案 4 :(得分:0)

嗯,你不需要正则表达式:

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作为函数参数和偏移量的组合,这意味着您现在可以遍历文件并获得所搜索字符串的多次发生)。

答案 5 :(得分:0)

In [6]: lines="""1. Tom is a guy
2. Sara is a woman
3. Alex is a guy too"""

In [10]: lines=lines.splitlines()

In [11]: def findLine(word):
   ....:     return filter(lambda x: word in x,lines)
   ....: 

In [12]: findLine("Alex")
Out[12]: ['3. Alex is a guy too']