2010-01-19 3 views
3

несколько запутанных .. но при попытке сделать поиск/repace с использованием шаблоновпоиска питона замена с использованием шаблонов

, если у меня есть что-то вроде:

<blah.... ssf ff> 
<bl.... ssf  dfggg ff> 
<b.... ssf  ghhjj fhf> 

и я хочу, чтобы заменить все вышеуказанные строки с например,

<hh >t 

любые мысли/комментарии о том, как это можно сделать?

благодарит

обновление (! Спасибо за комментарии)

я что-то отсутствует ...

мой первоначальный образец текста являются:

Soo Choi</span>LONGEDITBOX">Apryl Berney 
Soo Choi</span>LONGEDITBOX">Joel Franks 
Joel Franks</span>GEDITBOX">Alexander Yamato 

и я пытаясь получить

Soo Choi foo Apryl Berney 
Soo Choi foo Joel Franks 
Joel Franks foo Alexander Yamato 

я пробовал дифференцированиях

name=re.sub("</s[^>]*\">"," foo ",name) 

, но я не хватает чего-то ...

мысли ... спасибо

+0

хммм ... отсутствующего что-то ... мой первоначальный образец текста являются: Soo Choi LONGEDITBOX "> Apryl Berney Soo Choi LONGEDITBOX"> Joel франки Joel франки GEDITBOX "> Александр Ямато и я пытаюсь получить Soo Choi Foo Apryl Berney Soo Choi Foo Joel франки Joel франки Foo Александр Ямато я пробовал дифференцирования имя = re.sub ("] * \ ">"," Foo», имя) , но я отсутствует что-то ... мысли ... –

ответ

2

Смотрите довольно полезный Python Regular Expression руководство here, или для более практический подход a Regular Expression HOWTO раздел 5.2 Поиск и замена.

+0

Regex - это простой способ здесь. 's/<[^>] *>/ t/g' –

0

не должны использовать регулярное выражение

for line in open("file"): 
    if "<" in line and ">" in line: 
     s=line.rstrip().split(">") 
     for n,i in enumerate(s): 
      if "<" in i: 
       ind=i.find("<") 
       s[n]=i[:ind] +"<hh " 
     print '>t'.join(s) 

выход

$ cat file 
blah <blah.... ssf ff> blah 
blah <bl.... ssf  dfggg ff> blah <bl.... ssf  dfggg ff> 
blah <b.... ssf  ghhjj fhf> 

$ ./python.py 
blah <hh >t blah 
blah <hh >t blah <hh >t 
blah <hh >t 
+1

Это хорошее быстрое и грязное решение, но из-за этого оно не очень расширяемо; он также не проверяет 'b' после' <'- хотя неясно, было ли это требованием OP. С регулярным выражением он будет иметь гораздо более универсальный инструмент в руках. –

+1

да, я согласен. без дополнительной информации от OP. также, если OP действительно разбирает компиляцию HTML (или XML?), даже регулярное выражение не рекомендуется использовать :) – ghostdog74

0

Похоже, работа для «перевоспитания» модуля, вот небольшая выборочная функция для вас, хотя вы могли бы просто использовать одна строка re.sub().

Используйте «повторно» модуль, простой re.sub должен сделать трюк:

import re 

def subit(msg): 
    # Use the below if the string is multiline 
    # subbed = re.compile("(<.*?>)" re.DOTALL).sub("(<hh >t", msg) 
    subbed = re.sub("(<.*?>)", "<hh >t", msg) 
    return subbed 

# Your messages bundled into a list 
msgs = ["blah <blah.... ssf ff> blah", 
     "blah <bl.... ssf  dfggg ff> blah <bl.... ssf  dfggg ff>", 
     "blah <b.... ssf  ghhjj fhf>"] 

# Iterate the messages and print the substitution results 
for msg in msgs: 
    print subit(msg) 

Я предлагаю взглянуть на документы для «перевоспитания» модуля, хорошо документированный и может поможет вам добиться более точной обработки/замены текста.

+0

Вы используете функции для всего? – HCLivess

3

Как насчет, как это, с регулярным выражением

import re 

YOURTEXT=re.sub("<b[^>]*>","<hh >t",YOURTEXT)