如何将包含实体引用的Unicode字符串与非Unicode字符串进行比较
我正在评估成千上万的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 个回答
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
为什么不直接用 .replace(u'\x97','')
呢?那个 '|'
是从哪里来的想法呢?
>>> s = u'KEY1A\x97DEMOGRAPHICRESPONSES'
>>> s.replace(u'\x97', '')
u'KEY1ADEMOGRAPHICRESPONSES'