如何将unicode字符串与实体ref比较为非unicode字符串

时间:2010-08-21 22:34:24

标签: python html unicode entities

我正在评估数十万个html文件。我正在寻找文件的特定部分。创建文件的方式可能有很小的变化

例如,在一个文件中,我可以有一个部分标题(在我将其转换为上部并拆分后再加入文本以消除可能不一致的空白区域:

u'KEY1A\x97RISKFACTORS'

在另一个文件中,我可以:

'KEY1ARISKFACTORS'

我正在尝试创建一个可能的回复字典,我想比较这两个并得出它们是平等的结论。但是我尝试运行第一个字符串来删除'\ 97的每个替换似乎都不起作用

有许多关键字的变体与实体的各种表示,所以我真的想或多或少地自动创建一个字典,所以我有类似的东西:

key_dict={'u'KEY1A\x97RISKFACTORS':''KEY1ARISKFACTORS',''KEY1ARISKFACTORS':'KEY1ARISKFACTORS',. . .}

我假设自从我开始运作

S1='A'
S2=u'A'
S1==S2

我得到了

True

我应该能够在处理html实体后比较这些

我特意尝试的是

new_string=u'KEY1A\x97RISKFACTORS'.replace('|','')

我收到了错误

对不起,自昨晚以来我一直在这。 SLott指出了一些东西,我发现我使用了错误的标签,希望这更有意义

2 个答案:

答案 0 :(得分:2)

你是正确的,如果S1 ='A'且S2 = u'A',则S1 == S2。不过假设这个,你可以做一个简单的测试:

key_dict= {u'A':'Value1',
        'A':'Value2'}

print key_dict
print u'A' == 'A'

输出:

{u'A': 'Value2'}
True

解决了,让我们来看看:

new_string=u'KEY1A\x97DEMOGRAPHICRESPONSES'.replace('|','')

这里有一个问题,\ x97是您尝试在目标字符串中替换的值。但是,您的搜索字符串是'|',它是十六进制值0x7C(ascii和unicode),显然不是您需要替换的值。即使目标和搜索字符串都是ascii或unicode,你仍然找不到'\ x97'。第二个问题是您正在尝试在unicode字符串中搜索非unicode字符串。最简单的解决方案,也是最有意义的解决方案是简单地搜索u'\ x97':

print u'KEY1A\x97DEMOGRAPHICRESPONSES'
print u'KEY1A\x97DEMOGRAPHICRESPONSES'.replace(u'\x97', u'')

输出:

KEY1A\x97DEMOGRAPHICRESPONSES
KEY1ADEMOGRAPHICRESPONSES

答案 1 :(得分:1)

为什么不显而易见.replace(u'\x97','')'|'的想法来自何处?

>>> s = u'KEY1A\x97DEMOGRAPHICRESPONSES'
>>> s.replace(u'\x97', '')
u'KEY1ADEMOGRAPHICRESPONSES'