2016-01-27 4 views
1

В perl, я могу сделать следующие с дополнит мои символы пунктуации с пробелами:Перетяжка множественный характер с пространством - питон

s/([،;؛¿!"\])}»›”؟%٪°±©®।॥…])/ $1 /g;` 

В Python, я попытался это:

>>> p = u'،;؛¿!"\])}»›”؟%٪°±©®।॥…' 
>>> text = u"this, is a sentence with weird» symbols… appearing everywhere¿" 
>>> for i in p: 
...  text = text.replace(i, ' '+i+' ') 
... 
>>> text 
u'this, is a sentence with weird \xbb symbols \u2026 appearing everywhere \xbf ' 
>>> print text 
this, is a sentence with weird » symbols … appearing everywhere ¿ 

Но есть ли способ использовать какой-то символ-заполнитель, например $1 в perl, где я могу сделать то же самое в python с 1 регулярным выражением?

+4

Предпочтительно, если вы можете размещать отдельные вопросы вместо объединения вопросов в один. Таким образом, это помогает людям отвечать на ваш вопрос, а также другим, охотящимся хотя бы на один из ваших вопросов. Благодаря! – kayess

+0

@ kayess, в данном случае это почти тот же вопрос; я думаю, что задание другого вопроса приведет к дублированию. Особенно, когда '\ p {Open_Punctuation}' - это нечто похожее на 'u '" ""' <(["" "' – alvas

+1

По популярному запросу: http://stackoverflow.com/questions/35040905/what-is-the -equivalence-of-perluniprops-in-python =) – alvas

ответ

2

Python версии $1 является \1, но вы должны использовать регулярное выражение замены вместо простой строки замены :

import re 

p = ur'([،;؛¿!"\])}»›”؟%٪°±©®।॥…])' 
text = u"this, is a sentence with weird» symbols… appearing everywhere¿" 

print re.sub(p, ur' \1 ', text) 

Выходы:

this , is a sentence with weird » symbols … appearing everywhere ¿ 
0

Используйте функцию format и вставьте unicode строку:

p = u'،;؛¿!"\])}»›”؟%٪°±©®।॥…' 
text = u"this, is a sentence with weird» symbols… appearing everywhere¿" 
for i in p: 
    text = text.replace(i, u' {} '.format(i)) 

print(text) 

Выход

this, is a sentence with weird » symbols … appearing everywhere ¿ 
+2

OP хочет избавиться от цикла 'for'. Ваш ответ не семантически отличается от оригинала, за исключением того, что ваш запуск выполняется немного быстрее. – Selcuk

2

Вы можете использовать re.sub с \1 в качестве заполнителя.

>>> p = u'،;؛¿!"\])}»›”؟%٪°±©®।॥…' 
>>> text = u"this, is a sentence with weird» symbols… appearing everywhere¿" 
>>> text = re.sub(u'([{}])'.format(p), r' \1 ', text) 
>>> print text 
this, is a sentence with weird » symbols … appearing everywhere ¿ 
Смежные вопросы