Использование пользовательского ввода в качестве выражения поиска в регулярном выражении

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

Моя проблема заключается в том, что все введенные пользователем данные форматируются как строка. Поэтому (исправьте меня, если я ошибаюсь), ввод [a-z] + приведет к поисковому выражению «[a-z] +». Это проблема, если я хочу, чтобы r "[a-z] +" в качестве моего поискового выражения, так как включение этого в качестве пользовательского ввода даст мне "r" [a-z] + "" (опять же, исправьте меня, если я ошибаюсь). Очевидно, что это не будет работать с регулярным выражением. Как форматировать вход так, чтобы вход r "[a-z] +" оставался r "[a-z] +"?

Это раздел кода. TextFile в аргументах функции импортируется из другого раздела программы и используется в поиске регулярных выражений:

def new_search_regex(textFile):
    """Query for input, then performs RegEx() with user's input"""
    global totalSearches
    global allSearchResults

    # ask user for regular expression to be searched
    expression = raw_input("Please enter the Regular Expression to be searched: ")

    # perform initial regex search
    foundRegex = re.search(expression, textFile)

    # if Regex search successful
    if foundRegex != None:

        # Do complete regex search
        foundRegex = re.findall(expression, textFile)

        # Print result
        print "Result: " + str(foundRegex)

        # Increment global total
        totalSearches += 1

        # create object for result, store in global array
        reg_object = Reg_Search(totalSearches, expression, foundRegex)
        allSearchResults.append(reg_object)
        print "You're search number for this search is " + str(totalSearches)        # Inform user of storage location

    # if Regex search unsuccessful
    else:
        print "Search did not have any results."

    return

Примечание. В конце я создаю объект для результата и сохраняю его в глобальном массиве.

Это также предполагает, что пользователь грамотно вводит нереагирующие регулярные выражения. Я скоро начну добавлять проверку ошибок, например, используя .escape на входе пользователя. Как это повлияет на мою ситуацию? Может ли это нанести ущерб пользователю, включая «во входном?

1
nl ja de

2 ответы

Синтаксис r "..." полезен только для того, чтобы компилятор python не интерпретировал escape-последовательности (например, \ n , который был преобразован в символ новой строки). После анализа компилятором он будет просто регулярной строкой.

Мы читаем ввод от пользователя с помощью `raw_input, что компилятор не выполняет интерпретации escape-последовательности. Вам не нужно ничего делать, строка уже правильно интерпретируется.

Вы можете проверить это сами так:

>>> x = r"[a-z]+\n"
>>> y = raw_input("")
[a-z]+\n
>>> x == y
True
2
добавлено
Отлично! Большое спасибо.
добавлено автор argonXM, источник

Непосредственно из Python http://docs.python.org/2/library/re. HTML :

import re
m = re.search(regexp_as_string, payload)
m.group(0) #first occurence of the pattern
0
добавлено
Не забудьте отформатировать ввод пользователя (чтобы удалить неприятные символы конечной строки).
добавлено автор Ketouem, источник
В качестве альтернативы вы можете использовать eval() пользователя, но я бы не рекомендовал его (даже если вы имеете дело с пользователем власти)
добавлено автор Ketouem, источник
Python
Python
7 654 участник(ов)

Уютный чат для профессионалов, занимающихся поиском питоньих мудростей. Как не получить бан: https://t.me/ru_python/577926

Python beginners
Python beginners
4 449 участник(ов)

Вопросы про Python для чайников. Cпам и троллинг неприемлем. Не злоупотребляйте стикерами. Частозадаваемые вопросы: https://github.com/ru-python-beginners/faq/blob/master/README.md Статистика тут: https://grstats.me/chat/x4qym2k5uvfkr3al6at7

pro.python
pro.python
1 090 участник(ов)

Сообщество разработчиков под Python Создатель: @rodgelius

Rude Python
Rude Python
971 участник(ов)

Python без „девочек”, здесь матерятся и унижают Django. Not gay friendly. Правила: t.me/rudepython/114107 @rudepython | t.me/rudepython

rupython
rupython
509 участник(ов)

Группа создана с целью оперативного получения ответов на возникающие вопросы по разработке на яп python, смежные темы, а также человеческого общения. Приветствую!

Python-programming
Python-programming
266 участник(ов)

Чат группы вконтакте https://vk.com/python_community