вставка переменной в регулярное выражение - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь написать код, который может извлекать значения из переменных в текстовом файле.

, поэтому, если файл был
"bob= 1255 mike = 13"

, когда я указал bob как var_name, он извлек бы 1255 и так далее.

основал мой код на этом , но, похоже, он не работает

var_name = 'bob'

regexp = re.compile(r''+var_name+'.*?([0-9.-]+)')

with open("textfile") as s:
    for line in s:
        match = regexp.match(line)
        if match:
            print(match.group(1))

var_name = 'mike'

regexp = re.compile(r''+var_name+'.*?([0-9.-]+)')

with open("textfile") as s:
    for line in s:
        match = regexp.match(line)
        if match:
            print(match.group(1))

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Вы используете re.match, который находит вещи только в начале строки (а mike не в начале строки).Используйте re.search, который находит вещи в любой позиции.


Немного не по теме: обратите внимание, что r'...' не означает «литерал регулярного выражения».Это означает «необработанный строковый литерал».Цель этого состоит в том, чтобы избежать обратной косой черты внутри строки.Теперь, очевидно, '' не содержит никаких обратных косых черт, поэтому r'' ничем не отличается от ''.С другой стороны, .*?([0-9.-]+) достаточно сложен, поэтому мы не уверены, есть ли в нем (или будут) какие-либо обратные слеши - и все же вы не превращаете его в необработанный строковый литерал.Непонятные.:) Я бы написал var_name + r'.*?([0-9.-]+)', без бесполезного r'' + ...

0 голосов
/ 01 февраля 2019

Вы не упомянули, что работает / что не работает.

Вместо .*? следует использовать \s*=\s*.В противном случае вы можете поймать такие вещи, как #edsakjj*kjn - и я предполагаю, что вы этого не хотите.

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

Тестовое регулярное выражение

Что касается кода Python, я не ваш парень, извините(

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