2

私は、ユーザーが指定したファイルを開き、ユーザー入力を受け取り、その入力を正規表現として使用してファイルを検索するように設計された個人プロジェクトに取り組んでいます。これの目的は、正規表現がどのように機能するか、およびそれらをプログラムに組み込む方法をより深く理解することです。

私の問題は、ユーザーが私に与えるすべての入力が文字列としてフォーマットされていることです。したがって(間違っている場合は訂正してください)、[az] +を入力すると、検索式「[az]+」になります。これは、検索式としてr "[az] +"が必要な場合に問題になります。これをユーザー入力として入力すると、 "r" [az] + ""が返されます(間違っている場合は修正してください)。これは明らかに正規表現では機能しません。r"[az]+"の入力がr"[az]+"のままになるように入力をフォーマットするにはどうすればよいですか?

これは問題のコードセクションです。関数の引数の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を使用するなど、エラーチェックをすぐに追加し始めます。これは私の状況にどのように影響しますか?入力に「」を含めて、ユーザーに大混乱をもたらしますか?

4

2 に答える 2

3

このr"..."構文は、Pythonコンパイラがエスケープシーケンスを解釈しないようにする場合にのみ役立ちます(\nたとえば、改行文字に変換されます)。コンパイラによって解析されると、通常の文字列になります。

`raw_inputを使用してユーザーからの入力を読み取ると、コンパイラはエスケープシーケンスの解釈を実行しません。何もする必要はありません。文字列はすでに正しく解釈されています。

これは次のように自分でテストできます。

>>> x = r"[a-z]+\n"
>>> y = raw_input("")
[a-z]+\n
>>> x == y
True
于 2012-12-28T09:03:17.803 に答える
0

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
于 2012-12-28T08:49:49.177 に答える