Python3 Интерпретирует строку как Raw [duplicate]

36
задан Vijay Murthy 31 August 2011 в 22:03
поделиться

8 ответов

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

Это означает, что интерпретация происходит где-то в другом месте. Но если вы знаете, что это происходит, почему бы не избежать обратных косых черт для того, что его интерпретирует?

s = s.replace("\\", "\\\\")

(Обратите внимание, что вы не можете делать r"\" как "необработанная строка не может закончиться в одиночном обратном слэше ", но я мог бы использовать r"\\" также для второго аргумента.)

Если это не сработает, ваш пользовательский ввод используется по какой-то тайной причине, интерпретирующей обратную косую черту, так что вам нужно будет сказать, чтобы остановить это.

41
ответ дан Qantas 94 Heavy 23 August 2018 в 17:28
поделиться

Если вы хотите преобразовать существующую строку в необработанную строку, мы можем переназначить это, как показано ниже

s1 = "welcome\tto\tPython"

raw_s1 = "%r"%s1

print(raw_s1)

Будет напечатан

welcome\tto\tPython

12
ответ дан EsmaeelE 23 August 2018 в 17:28
поделиться
import re

matches = []
var = 'Hello, how are you?'

search_term = 'how are'


if re.search('\\b'+search_term+'\\b', var):
    matches.append(search_term)
    print matches

else:
    print 'false'
0
ответ дан JoryRFerrell 23 August 2018 в 17:28
поделиться

Я потратил много времени на различные ответы по всему Интернету, и я подозреваю, почему одни вещи работают для некоторых людей, а не для других, из-за очень небольших странных различий в приложении. Для контекста мне нужно было прочитать имена файлов из файла csv, в котором были странные и / или unmappable символы Unicode и записать их в новый файл csv. Для чего это стоит, вот что сработало для меня:

s = '\u00e7\u00a3\u0085\u00e5\u008d\u0095' # csv freaks if you try to write this
s = repr(s.encode('utf-8', 'ignore'))[2:-1]
0
ответ дан Katherine 23 August 2018 в 17:28
поделиться

Когда вы читаете строку из элемента управления GUI, это уже «сырая» строка. Если вы распечатываете строку, вы можете увидеть, что обратная косая черта удвоилась, но это артефакт того, как Python отображает строки; внутри есть еще только одна обратная косая черта.

>>> a='\nu + \lambda + \theta'
>>> a
'\nu + \\lambda + \theta'
>>> len(a)
20
>>> b=r'\nu + \lambda + \theta'
>>> b
'\\nu + \\lambda + \\theta'
>>> len(b)
22
>>> b[0]
'\\'
>>> print b
\nu + \lambda + \theta
3
ответ дан Mark Ransom 23 August 2018 в 17:28
поделиться

Другой способ преобразования «string» в «raw string»

def string2RawString(string):
    rawString = ''
    for i in string.split('\\'):
        rawString = rawString+("%r"%i).strip("'")+"\\"
    return rawString
0
ответ дан srinivas_n 23 August 2018 в 17:28
поделиться
a='\nu + \lambda + \theta'
d=a.encode('string_escape').replace('\\\\','\\')
print(d)
# \nu + \lambda + \theta

Это показывает, что перед n, l и t:

print(list(d))
# ['\\', 'n', 'u', ' ', '+', ' ', '\\', 'l', 'a', 'm', 'b', 'd', 'a', ' ', '+', ' ', '\\', 't', 'h', 'e', 't', 'a']

есть одна обратная косая черта с обратной связью. , Вот простой пример захвата некоторого пользовательского ввода через Tkinter.Entry. Обратите внимание, что только что найденный текст имеет только обратную косую черту перед n, l и t. Таким образом, дополнительная обработка не требуется:

import Tkinter as tk

def callback():
    print(list(text.get()))

root = tk.Tk()
root.config()

b = tk.Button(root, text="get", width=10, command=callback)

text=tk.StringVar()

entry = tk.Entry(root,textvariable=text)
b.pack(padx=5, pady=5)
entry.pack(padx=5, pady=5)
root.mainloop()

Если вы введете \nu + \lambda + \theta в поле ввода, консоль (правильно) напечатает:

['\\', 'n', 'u', ' ', '+', ' ', '\\', 'l', 'a', 'm', 'b', 'd', 'a', ' ', '+', ' ', '\\', 't', 'h', 'e', 't', 'a']

Если ваш графический интерфейс не возвращает похожие результаты (как кажется, кажется, ваш пост), то я бы рекомендовал изучить проблему с графическим интерфейсом, а не сбрасывать string_escape и строку replace.

4
ответ дан unutbu 23 August 2018 в 17:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: