Regex заменить с правильным интервалом - PullRequest
2 голосов
/ 03 августа 2011

Мне нужна помощь по проблеме с регулярными выражениями в китайских иероглифах в python.

"拉柏 多 公园" - правильная форма слова, но в тексте я нашел "拉柏 多 公 园", какое регулярное выражение я должен использовать, чтобы заменить символы.

import re

name = "拉柏多公园"
line = "whatever whatever it is then there comes a 拉柏 多公 园 sort of thing"
line2 = "whatever whatever it is then there comes another拉柏 多公 园 sort of thing"
line3 = "whatever whatever it is then there comes yet another 拉柏 多公 园sort of thing"
line4 = "whatever whatever it is then there comes a拉柏 多公 园sort of thing"

firstchar = "拉"
lastchar = "园"

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

line = "whatever whatever it is then there comes a 拉柏多公园 sort of thing"
line2 = "whatever whatever it is then there comes another 拉柏多公园 sort of thing"
line3 = "whatever whatever it is then there comes yet another 拉柏多公园 sort of thing"
line4 = "whatever whatever it is then there comes a 拉柏多公园 sort of thing"

Я пытался это сделать, но регулярное выражение плохо структурировано:

reline = line.replace (r"firstchar*lastchar", name) #
reline2 = reline.replace ("  ", " ")
print reline2

Может кто-нибудь помочь исправить мое регулярное выражение?

Спасибо

1 Ответ

4 голосов
/ 03 августа 2011

(я предполагаю, что вы используете python 3, поскольку вы используете символы Юникода в обычных строках. Для python 2 добавьте u перед каждым строковым литералом.)

Python 3

import re

name = "拉柏多公园"
# the string of Chinese characters, with any number of spaces interspersed.
# The regex will match any surrounding spaces.
regex = r"\s*拉\s*柏\s*多\s*公\s*园\s*"

Таким образом, вы можете заменить каждую строку на

reline = re.sub(regex, ' ' + name + ' ', line)

Python 2

# -*- coding: utf-8 -*-

import re

name = u"拉柏多公园"
# the string of Chinese characters, with any number of spaces interspersed.
# The regex will match any surrounding spaces.
regex = ur"\s*拉\s*柏\s*多\s*公\s*园\s*"

Таким образом, вы можете заменить каждую строку на

reline = re.sub(regex, u' ' + name + u' ', line)

Обсуждение

Результат будет окружен пробелами. В более общем смысле, если вы хотите, чтобы он работал в начале или в конце строки, или перед запятыми или точками, вам придется заменить ' ' + name + ' ' на что-то более сложное.

Редактировать: исправлено. Конечно, вы должны использовать библиотечную функцию re.

...