поиск Python заменить с использованием подстановочных знаков - PullRequest
4 голосов
/ 19 января 2010

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

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

 <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) 

но я что-то упустил ...

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

Ответы [ 4 ]

3 голосов
/ 19 января 2010

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

import re

YOURTEXT=re.sub("<b[^>]*>","<hh >t",YOURTEXT)
2 голосов
/ 19 января 2010

См. Довольно полезное регулярное выражение Python , руководство здесь или для более практического подхода Регулярное выражение HOWTO раздел 5.2 Поиск и Заменить .

0 голосов
/ 19 января 2010

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

Используйте модуль re, простой 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)

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

0 голосов
/ 19 января 2010

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

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
...