Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подсткажите по обработке текста 
:(
    Опции темы
Suppir
Дата 5.6.2009, 14:56 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

Репутация: нет
Всего: нет



Добрый день!

Я как-то давно пробовал Python (кажется, версия 2.3) для обработки текста. На тот момент в Python невозможно было модифицировать найденную строку, а можно было только составить "по кускам" новую строку из старой.
Что я имею в виду под "модификацией"? Например, как в Perl: s/мама мыла раму/мама мыла Лену/. Т.е. оператор ищет левую часть и заменяет на левую. 
1) можно ли в нынешнем Python делать подобное?
2) поддерживаются ли при замене обратные ссылки?
3) нормально ли распознаются файлы в коридовке cp866?
4) какую версию Python скачать (я видел, что есть 2.6 и есть 3.0, но она, вроде, экспериментальная)
Спасибо

Это сообщение отредактировал(а) Suppir - 5.6.2009, 14:57
PM MAIL   Вверх
_Viper_
Дата 5.6.2009, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 8.11.2006

Репутация: 10
Всего: 11



1) строки как были неизменяемыми так и остались
3) кодировка автоматом не распознаётся, а так открываются файлы нормально, в любой кодировке smile
4) лучше 2.6

PM MAIL   Вверх
Hydrevt
Дата 6.6.2009, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 9.10.2008

Репутация: нет
Всего: нет



"Строки неизменяемые" - в том смысле, что нельзя изменять внутри них отдельные символы. ПРо замены и обратные ссылки, думаю, большую часть пояснит пример
Код

# -*- coding: cp1251 -*-
import re

s1 = 'Мама мыла раму'
print s1
# Именованные и неименованные backreferences,
# RE компилируется и вызывается его метод (предпочтительнее):
find_re = re.compile('(?P<first>Мама мы)(ла раму)')
s2 = find_re.sub('\\g<first>ли\\2', s1)
print s2 # Мама мылила раму
# Без компиляции RE, непосредственно,
# Изменение исходной строки:
s1 = re.sub('(мыла)', 'по\\1', s1)
print s1 # Мама помыла раму

Если сторонним редактором исправить заголовок на cp866 и сохранить в кодировке DOS, то при редактировании IDLE русские буквы будут выглядеть нормально, сохраняться всё будет в кодировке DOS, а вот при выполнении полезут Ё©-и, чего и следовало ожидать.
Я тоже приходил в Python из Perl, и чего действительно не хватало, так это интерполяции переменных внутри регулярных выражений. Немного помучавшись, написал для этого свой класс; если кому интересно - пишите, код (включая демонстрацию-тест через unittest) пришлю или выложу тут.
PM MAIL   Вверх
Suppir
Дата 8.6.2009, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

Репутация: нет
Всего: нет



_Viper_ - спасибо за ответ.
.
to Hydrevt:
1) очень интересно, как общие впечатления от перехода? Помимо обработки текста smile
2) насчет интерполяции переменных - вы имеете в виду, что переменные не могут меняться за время обработки регулярного выражения, и что вообще нельзя использовать переменные внутри регулярного выраженя?
Например, регулярное выражение /\s$br\.$br\.\s$br$lr+\s/, где $br="[ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ]"; а $lr="[йцукенгшщзхъфывапролджэячсмитьбю]". Соответственно, выражение ищет запись фамилии в виде "А.А. Иванов". Можно ли подобное использовать в python?
3) если не сложно, могли бы перевести этот небольшой скрипт на python? (интересна работа с хешами)

open I, "1.txt";    # открываем файл исходников
open O, ">1.log";  # открывает файл для записи 
/(.*?N.*?) "/ &&   # поиск общей части в строках (от начала строки, захватывая символ "N" в середине, до первой кавычки)
$a{$1}++==1 &&    # поиск дублей в общей части
print O "$1\n"     # вывод дублей в log
while <I>


Это сообщение отредактировал(а) Suppir - 8.6.2009, 10:11
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0668 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.