Сопоставление точных строк в python

Как я могу сопоставить точные строки в Python, которые могут динамически перехватывать/игнорировать следующие случаи?

Если я хочу получить значение2 в этом IE, выведите «Y» из файла, который отформатирован как таковой:

...
--value1 X
---value2 Y
----value3 Z
....

Как я могу искать точное совпадение «значение2», игнорируя предшествующий «---», эти символы не допускают точного совпадения строк с оператором «==» при поиске каждой строки.


person cc6g11    schedule 11.03.2019    source источник


Ответы (4)


Вы можете удалить начальные тире, а затем разделить результат, чтобы получить первое слово без тире:

скажем, вы повторяете строки:

for line in lines:
    first_word = line.lstrip("-").split()
    if first_word == "value2":
        print("found")

регулярное выражение тоже может помочь, с границей слова справа

if re.match(r"^-*value2\b",line):
person Jean-François Fabre    schedule 11.03.2019

Вы можете удалить лишние символы в начале строки s, используя s.lstrip('-') перед использованием точного совпадения. Есть и другие способы справиться с этим, но это самый быстрый и строгий способ без использования регулярных выражений.

person Christoph Burschka    schedule 11.03.2019

Можете ли вы гарантировать, что все допустимые слова с тире перед ними и пробел после? Если это так, вы можете написать это так:

for line in lines:
    if '-value2 ' in line:
        print(line.split()[1])
person Kirk Strauser    schedule 11.03.2019

Самый простой способ, который я знаю:

for line in lines:
  if 'value2' in line:
    ...

Другой способ (если вам нужно знать позицию):

for line in lines:
  pos = line.find('value2')
  if pos >= 0:
     ...

При необходимости можно делать и более сложные вещи, например регулярное выражение, но не зная, какая проверка вам нужна. Два вышеописанных способа, на мой взгляд, самые простые.

ОБНОВЛЕНИЕ (обращение к комментарию): (Пытаясь упростить, для этого требуется пробел после числа)

for line in lines:
  for token in line.split():
    if 'value2' in token:
      ...
person gchaber    schedule 11.03.2019
comment
if 'value2' in line не соответствует точному слову. Попробуйте с value222 - person Jean-François Fabre; 11.03.2019
comment
Это правда, но я не был уверен, зачем это нужно оператору, поэтому дал два очень простых предложения. Я отредактирую свой пост с быстрой альтернативой (при условии, что после этого потребуется место). Что-то более сложное, чем это, и я бы перешел к решениям, опубликованным другими, или использовал бы регулярное выражение. - person gchaber; 11.03.2019