【问题标题】:How to compare unicode strings with entity ref to non-unicode string如何将带有实体引用的 unicode 字符串与非 unicode 字符串进行比较
【发布时间】:2010-08-21 22:34:23
【问题描述】:

我正在评估数十万个 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 指出了一些东西,我发现我使用了错误的标签,希望这更有意义

【问题讨论】:

  • “我假设因为如果 S1='A' S2=u'A' S1==S2 True”?你为什么假设这个?为什么不测试它是否真的是真的?

标签: python html unicode entities


【解决方案1】:

如果 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

【讨论】:

  • 感谢您的回答。你的布置方式很有帮助
【解决方案2】:

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

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

【讨论】:

  • 谢谢,我一直在做 s.replace('\x97',''),我没有把你给我你的号码!再次感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-29
  • 1970-01-01
  • 2013-09-04
  • 2013-05-04
  • 1970-01-01
相关资源
最近更新 更多