2012-04-25 4 views
-7

Можно создать дубликат:
How to refer to “\” sign in python stringЯ хочу удалить «» из строки в Python

Я довольно большие строки данных, в которых я, чтобы удалить все другие символы чем AZ, az и 0-9 Я могу удалить почти каждый символ, но проблема '\' является проблемой.

каждый символ удаляется, но «\» делает проблему

def replace_all(text, dic): 
    for i, j in dic.iteritems(): 
     text = text.replace(i, j) 
    return text 

reps = {' ':'-','.':'-','"':'-',',':'-','/':'-', 
     '<':'-',';':'-',':':'-','*':'-','+':'-', 
     '=':'-','_':'-','?':'-','%':'-','!':'-', 
     '$':'-','(':'-',')':'-','\#':'-','[':'-', 
     ']':'-','\&':'-','@':'-','\W':'-','\t':'-'} 

x.name = x.name.lower() 

x1 = replace_all(x.name,reps) 
+7

Вам, вероятно, нужно избежать строки с «\\». – birryree

+0

Я не могу избавиться от символа '\', как я могу это сделать, используя код выше? Большое вам спасибо за ваш ответ :) –

+0

Знаете ли вы, что, только разрешая a-z, вы исключите некоторые буквы из других алфавитов, таких как å? Это действительно то, что вы хотите сделать? –

ответ

1

Если у вас есть строка:

a = 'hi how \\are you' 

вы можете удалить его, выполнив:

a.replace('\\','') 

>'hi how are you' 

Если у вас есть конкретный контекст, в котором у вас возникли проблемы, я рекомендую разместить немного более подробно.

+0

Большое спасибо :) –

+0

На самом деле я работаю над дампом данных thepiratebay, в котором атрибуты разделены символом '|'. Я делаю для него индекс. В именах торрентов мне нужен только текст, символы или контрольные слова. –

+0

Похоже, вы на правильном пути. Escaping the \ позволит вам включить это в словарь. Вероятно, вы могли бы сделать код более элегантным с короткой лямбда-функцией и регулярным выражением, а не с большим словарем. – valdarin

1

birryee правильно, вам нужно, чтобы избежать обратной косой черты со второй обратной косой черты.

+0

В таком случае, было бы лучше проголосовать за пост, а не добавить еще один ответ? – Darthfett

+0

@ Darthfett: Он не опубликовал его в качестве ответа. –

+0

@MarkByers Спасибо, я прошу прощения за то, что не искал этого. – Darthfett

1

, чтобы удалить все, кроме AZ, AZ и 0-9

Вместо того, чтобы пытаться перечислить все символы, которые вы хотите удалить (что бы взять долгое время) символов, используйте регулярное выражение, чтобы указать те символы, которые вы хотите сохранить:

import re 
text = re.sub('[^0-9A-Za-z]', '-', text) 
4

Я довольно большие строки данных, в которых я имею, чтобы удалить все, кроме A-Z, A-Z и 0-9

Другими словами персонажей, вы хотите сохранить только те символы.

Класс string уже предоставляет тест «каждый символ - буква или номер?», Называемый .isalnum(). Итак, мы можем только filter с этим:

>>> filter(str.isalnum, 'foo-bar\\baz42') 
'foobarbaz42' 
+0

Это не сработает. 'Фильтр (ул.isalnum, 'foo-bar \\ bazå42') 'дает' 'foobarbaz \ xe542'' –

+0

å не является буквенно-цифровым? – kindall

+0

Есть ли библиотека, необходимая для этой функции? –

Смежные вопросы