2013-01-21 4 views
1

Я хотел бы, чтобы удалить текст из моих строк, которые начинаются с "\", такими как:re.sub жадные персонажи

\xf, \africa\87, \ckat\x70, ... 

Есть ли способ сделать это с помощью жадных символов в re.sub?

.: например

line = re.sub("[\.*]", "", line) 

Спасибо!

EDIT: входной пример:

" lorem ipsum \xe2\x80\x9csianhill7 lorem ipsum" 

выход:

" lorem ipsum lorem ipsum" 
+1

вы должен, вероятно, добавить пример ввода и вывода. –

+1

Действительно ли '\ xe2' действительно' \ xe2', или это означает символ с кодом ASCII 0xe2? – nhahtdh

+0

Я считаю, что это символ с кодом ASCII 0xe2, но он появляется как \ xe2 в моем тексте – Julia

ответ

3

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

Вы легко можете сделать это через single pass LC с ordinal match и filter без использования regex

>>> data = " lorem ipsum \xe2\x80\x9csianhill7 lorem ipsum" 
>>> ' '.join(e for e in data.split() if 31 < ord(e[0]) < 127) 
'lorem ipsum lorem ipsum' 
+0

Я думаю, что '31

+0

@AshwiniChaudhary: Спасибо ... Point Taken – Abhijit

1

Выражение для соответствия является:

[\b\\][\w]+,? 

И с помощью ввода текста Lorem Ipsum выше выражения соответствует только внутренним словам, которые вы хотите удалить :)

example rubular

Я добавил некоторые другие регулярные выражения, чтобы соответствовать , внутри строки и используется * 0 или больше после \

[\b\\][\w.,]* 

another example

+0

Использование line = re.sub ("[\ b^\\] [\ w] +,?", "", Line) на самом деле удаляет все остальное, кроме строк, начинающихся с «\» ... Я не уверен, что я делаю что-то неправильно? – Julia

+0

yup Извините, что просто поправляю –

+0

, похоже, не работает для меня, такая же проблема снова, она только сохраняет строки, начинающиеся с \, и удаляет все остальное. – Julia

1
regex = re.compile(r""" 
        \\\S+\s* 
        """, re.VERBOSE) 
line = r" lorem ipsum \xe2\x80\x9csianhill7 lorem ipsum" 
replaced = regex.sub("", line) 

Обратите внимание, что вам нужно скажите python рассматривать «\» как обычный символ не как escape-символ. Это делается путем добавления r перед строкой.

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

+0

спасибо, хотя я не могу добавить« r »перед строкой, так как я импортирую ее с открытым ('... .csv') – Julia

+0

Если вы читаете напрямую из файла, вам не нужно «r». Это необходимо, только если вы хотите проверить код на изолированном примере. –