Как найти выделение всей строки для поиска только подстроки из строки в Python

1

Например, у меня есть следующие строки в файле:

  1. Том - парень
  2. Сара - женщина
  3. Алекс тоже парень

Я бы хотел поискать "Сару", но хотел бы вернуть все как

   def findLine(self, str):
   ...

Когда я вызываю findLine("Sara"), он возвращает "2. Sara is a woman"

Как это сделать с помощью Python и Regular Expression (или другого метода нерегулярных выражений)

Теги:

6 ответов

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

или если вам нужен список всех строк, содержащих сару

def findLine(self, str, search_str):
    return [x for x in str.splitlines() if search_str in x]

search_str - строка, которую вы хотите найти.

  • 0
    Но «str» содержит все содержимое файла.
  • 0
    @ Скотт: О, хорошо. Я изменил свой ответ
Показать ещё 7 комментариев
2

Для этого вам не нужен RegEx. Вы можете использовать file.readline() и проверить, содержит ли строка "Сара". Верните строку, если это произойдет. Используйте цикл for-each для проверки каждой строки в файле.

РЕДАКТИРОВАТЬ:

def findlines(filename, searchterm):
    lines = []
    line = filename.readline()

    while line:
        if searchterm in line:
            lines.append(line)

        line = filename.readline()

    return lines
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
  • 0
    Вам не нужно ни 'r' ни оператор with . GC Python закрывает файл
  • 0
    @Franklin, 'r' не имеет ничего общего с with или GC. Он определяет, в каком режиме открывается файл. Режим всегда не обязателен; когда оно опущено, подразумевается 'r' . Но явное лучше, чем неявное .
Показать ещё 4 комментария
1
def find(name)
    for line in open('file.txt'):
        if name in line:
            return line
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']
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

(Вышеупомянутое на самом деле представляет собой просто комбинацию других с добавлением имени файла в качестве параметра функции и смещения, что означает, что теперь вы можете пересечь файл и получить множественные случаи искомой строки).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню