Как удалить левую часть строки? - PullRequest
115 голосов
/ 01 марта 2009

У меня есть простой код на Python, который ищет в файлах строку, например. path=c:\path, в результате чего c:\path может отличаться. Текущий код:

def findPath( i_file) :
  lines = open( i_file ).readlines()
  for line in lines :
    if line.startswith( "Path=" ) :
      return # what to do here in order to get line content after "Path=" ?

Какой простой способ получить текст строки после Path=? Есть ли простой метод, без замыканий, размышлений или других эзотерических вещей?

Ответы [ 19 ]

1 голос
/ 09 января 2015

Поп-версия была не совсем правильной. Я думаю, что вы хотите:

>>> print('foofoobar'.split('foo', 1).pop())
foobar
1 голос
/ 01 марта 2009

line[5:] даст подстроку, которую вы хотите. Найдите введение и найдите «запись среза»

1 голос
/ 01 марта 2009
line[5:]

дает вам символы после первых пяти.

0 голосов
/ 12 июня 2019

Попробуйте следующий код

if line.startswith("Path="): return line[5:]
0 голосов
/ 12 июня 2019

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

non_matching_prefix, rest = the_string.split(prefix_to_remove, 1):
    if non_matching_prefix == "":
        #  do things with "rest"
        pass
0 голосов
/ 13 марта 2018

Почему бы не использовать регулярные выражения с escape? ^ соответствует начальной части строки, а re.MULTILINE соответствует каждой строке. re.escape гарантирует точное соответствие.

>>> print(re.sub('^' + re.escape('path='), repl='', string='path=c:\path\nd:\path2', flags=re.MULTILINE))
c:\path
d:\path2
0 голосов
/ 21 октября 2017

без необходимости писать функцию, она будет разделена по списку, в этом случае 'Mr. | Dr. | Mrs.', Выделите все после разделения с помощью [1], затем снова разделите и захватите любой элемент. В случае ниже, 'Моррис' возвращается.

re.split('Mr.|Dr.|Mrs.', 'Mr. Morgan Morris')[1].split()[1]
0 голосов
/ 03 декабря 2013

Я думаю, это то, что вы точно ищете

    def findPath(i_file) :
        lines = open( i_file ).readlines()
        for line in lines :
            if line.startswith( "Path=" ):
                output_line=line[(line.find("Path=")+len("Path=")):]
                return output_line
0 голосов
/ 02 марта 2009

Если вам известны списки:

lines = [line[5:] for line in file.readlines() if line[:5] == "Path="]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...