Python在一个环境中拒绝text.replace()

Python在一个环境中拒绝text.replace(),python,apache,replace,pylons,Python,Apache,Replace,Pylons,我一直在嘲弄下面一段关于pylons应用程序的肮脏支持代码,它可以在python shell、单独的python文件或在paster中运行时正常工作。现在,我们已经通过mod_wsgi和apache使应用程序联机,这段特定的代码完全停止工作。首先,代码本身: def fixStyle(self, text): t = text.replace('<p>', '<p style="%s">' % (STYLEDEF,)) t = t.replace('cla

我一直在嘲弄下面一段关于pylons应用程序的肮脏支持代码,它可以在python shell、单独的python文件或在paster中运行时正常工作。现在,我们已经通过mod_wsgi和apache使应用程序联机,这段特定的代码完全停止工作。首先,代码本身:

def fixStyle(self, text):
    t = text.replace('<p>', '<p style="%s">' % (STYLEDEF,))
    t = t.replace('class="wide"', 'style="width: 125px; %s"' % (STYLEDEF,))
    t = t.replace('<td>', '<td style="%s">' % (STYLEDEF,))
    t = t.replace('<a ', '<a style="%s" ' % (LINKSTYLE,))
    return t
def fixStyle(self,text):
t=text.replace(“”,“

”%(STYLEDEF,)) t=t.replace('class=“wide”,'style=“width:125px;%s”'(STYLEDEF,)) t=t.replace('',%(STYLEDEF,))


t=t.replace(“添加一些打印语句并检查Apache日志:

def fixStyle(self, text):
    print "text:", text
    print "STYLEDEF", STYLEDEF
    t = text.replace('<p>', '<p style="%s">' % (STYLEDEF,))
    print "t:", t
def fixStyle(self,text):
打印“文本:”,文本
打印“STYLEDEF”,STYLEDEF
t=text.replace(“”,“

”%(STYLEDEF,)) 打印“t:”,t


我不知道您的问题是什么,但我发现重复使用
replace()
不是一件好事:如果字符串中有四种模式,则将有四次创建新字符串

国际海事组织,这应该更好:

def fixStyle(self, text):
    t = text.replace('<p>', '<p style="%s">' % (STYLEDEF,))
    t = t.replace('class="wide"', 'style="width: 125px; %s"' % (STYLEDEF,))
    t = t.replace('<td>', '<td style="%s">' % STYLEDEF)
    t = t.replace('<a ', '<a style="%s" ' % (LINKSTYLE,))
    return t

import re

STYLEDEF = 'stuff-from-styledef'
LINKSTYLE = 'VVVV'

def aux(m, dic = {'<p':('<p style="',STYLEDEF),
                  '<td':('<td style="',STYLEDEF),
                  'class="wide"':('style="width: 125px; ',STYLEDEF),
                  '<a':('<a style="',LINKSTYLE)} ):

    return '%s%s"' % dic[m.group()]

pat = re.compile('<p(?=>)>|class="wide"|<td(?=>)|<a(?= )')

ch = '<table><tr><td>Test!</td></tr></table><a type="brown" >'
print ch
print fixStyle(None, ch)
print pat.sub(aux,ch)
为了去掉条件行,我写了前面的解决方案,我不知道为什么,我停在那里。解决方案的兴趣在于写正则表达式字符串,带有断言,允许写John Machin的解决方案,但我用这些oafish元组污染了它

还有一种解决方案:

def aux(m, STY = STYLEDEF,LIN = LINKSTYLE ):
    return ( 'style="width: 125px; ' if m.group(3) else m.group(1)+' style="' ) + \
           ( LIN if m.group(2) else STY) + '"'   

pat = re.compile('(<p(?=>)|<td(?=>)|(<a(?= )))|(class="wide")')
def aux(m,STY=STYLEDEF,LIN=LINKSTYLE): 返回('style=“width:125px;”如果m.group(3)或m.group(1)+'style=“”)+\ (如果m.group(2)else STY)+'“'
pat=re.compile('())|(对不起,但是:没有提到
repr()
的调试描述是不可信的。请确保您正在记录
repr(text)
repr(t)
,而不是
text
t


在同一数据段上运行非工作环境和至少一个工作环境,并编辑您的问题,以显示您使用的实际代码和实际日志输出。

嗯……您确定apache使用的是正确版本的文件吗?我想知道您是否可以用类似调试(text)的方式显示文本值我怀疑问题不在这里,我将文本和t值添加到日志(log.info([text,t,text==t]))没有任何改变。你是在返回之前写的吗?你的日志中写了什么?是的,我写了,在开始和结束时。两个输出完全相同。我将在一点时间内把它添加到原始问题中。你为什么不在
aux
定义时间将doodas连接起来?
dic
值变成例如
。@John Machin你知道:我的flick你说得很对。看看我的编辑。顺便说一句,是不是doodah,用h?我同意这样一个事实,4个互相替换是令人讨厌的,但它是肮脏的代码。而且,这是我能想到的最简单的代码。我不确定如何使代码更复杂来解决它。尽管如此!我会尝试这样做。因为没有ted在评论中,现在也是在最初的帖子中,我当然添加了日志来测试发生了什么。但是为了简洁起见,我删除了它。
def fixStyle(self, text):
    print "text:", text
    print "STYLEDEF", STYLEDEF
    t = text.replace('<p>', '<p style="%s">' % (STYLEDEF,))
    print "t:", t
def fixStyle(self, text):
    t = text.replace('<p>', '<p style="%s">' % (STYLEDEF,))
    t = t.replace('class="wide"', 'style="width: 125px; %s"' % (STYLEDEF,))
    t = t.replace('<td>', '<td style="%s">' % STYLEDEF)
    t = t.replace('<a ', '<a style="%s" ' % (LINKSTYLE,))
    return t

import re

STYLEDEF = 'stuff-from-styledef'
LINKSTYLE = 'VVVV'

def aux(m, dic = {'<p':('<p style="',STYLEDEF),
                  '<td':('<td style="',STYLEDEF),
                  'class="wide"':('style="width: 125px; ',STYLEDEF),
                  '<a':('<a style="',LINKSTYLE)} ):

    return '%s%s"' % dic[m.group()]

pat = re.compile('<p(?=>)>|class="wide"|<td(?=>)|<a(?= )')

ch = '<table><tr><td>Test!</td></tr></table><a type="brown" >'
print ch
print fixStyle(None, ch)
print pat.sub(aux,ch)
<table><tr><td>Test!</td></tr></table><a type="brown" >
<table><tr><td style="stuff-from-styledef">Test!</td></tr></table><a style="VVVV" type="brown" >
<table><tr><td style="stuff-from-styledef">Test!</td></tr></table><a style="VVVV" type="brown" >
def aux(m, dic = {'<p'          :'<p style="%s"',
                  '<td'         :'<td style="%s"',
                  'class="wide"':'style="width: 125px; %s"'} ):
    if m.group(1):
        return '<a style="%s"' % LINKSTYLE
    else:
        return dic[m.group()] % STYLEDEF

pat = re.compile('<p(?=>)|class="wide"|<td(?=>)|(<a)(?= )')
def aux(m, STY = STYLEDEF,LIN = LINKSTYLE ):
    return ( 'style="width: 125px; ' if m.group(3) else m.group(1)+' style="' ) + \
           ( LIN if m.group(2) else STY) + '"'   

pat = re.compile('(<p(?=>)|<td(?=>)|(<a(?= )))|(class="wide")')
def aux(m, dic = {'<p' :'<p style="%s"' % STYLEDEF,
                  '<td':'<td style="%s"' % STYLEDEF,
                  '<a' :'<a style="%s"' % LINKSTYLE,
                  'class="wide"':'style="%s"' % ('width: 125px; '+STYLEDEF) } ):
    return dic[m.group()] 

pat = re.compile('<p(?=>)|class="wide"|<td(?=>)|<a(?= )')