私は、ユーザーが指定したファイルを開き、ユーザー入力を受け取り、その入力を正規表現として使用してファイルを検索するように設計された個人プロジェクトに取り組んでいます。これの目的は、正規表現がどのように機能するか、およびそれらをプログラムに組み込む方法をより深く理解することです。
私の問題は、ユーザーが私に与えるすべての入力が文字列としてフォーマットされていることです。したがって(間違っている場合は訂正してください)、[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を使用するなど、エラーチェックをすぐに追加し始めます。これは私の状況にどのように影響しますか?入力に「」を含めて、ユーザーに大混乱をもたらしますか?