【问题标题】:How do I remove the last character of an R-T-L string in python?如何在 python 中删除 R-T-L 字符串的最后一个字符?
【发布时间】:2012-10-25 22:31:12
【问题描述】:

我正在尝试以“从右到左”的语言删除字符串的最后一个字符。但是,当我这样做时,最后一个字符会换行到字符串的开头。 例如 ותֵיהֶם]׃ 变成 ותֵיהֶם]

我知道这是我如何处理 R-T-L 范式的一个基本问题,但如果有人能帮我思考一下,我将非常感激。

代码

with open(r"file.txt","r") as f:
    for line in f:
        line = unicode(line,'utf-8')
        the_text = line.split('\t')[1]
        the_text.replace(u'\u05C3','')

【问题讨论】:

  • 你能给我们#some unicode object的值吗?您如何存储字符串(作为 r-t-l 或 l-t-r,但按照约定将其呈现为 r-t-l)?
  • 道歉。 #some unicode object 实际上是第一段中的字符串(ותֵיהֶם]׃)。我更新了我的代码,以反映我首先是如何获取对象的。
  • 在 r-t-l 中,最后一个字符是左边的第一个字符,对吗? line[1:] 不工作吗?

标签: python string unicode right-to-left


【解决方案1】:

Unicode 中的某些字符始终是 LTR,有些始终是 RTL,有些则取决于它们周围的上下文。此外,双向文本的显示上下文将具有“主要”方向性(例如,为主要是英文文本配置的文本编辑器将主要是 LTR 并且具有参差不齐的右边距,配置为主要是希伯来语的文本编辑器将主要是 RTL,具有参差不齐的左边距)。

看起来这里发生的事情是,当右方括号字符出现在两个 RTL 字符之间时,它会以其 RTL 形式呈现(您的第一个示例),但是当它出现在 RTL 和 LTR 字符之间(或在字符串的结尾 - 基本上,它在两侧没有相同方向的其他字符的地方)然后它被认为是与主要方向匹配的任何文本运行的一部分。如果您尝试将鼠标拖到字符串上以选择字符,您会看到 逻辑上 关闭 ] 仍然跟随 ֶם,即使 视觉上已经搬家了。

如果字符串中的倒数第二个字符也是希伯来字符(或其他强 RTL 字符)而不是 ],或者如果显示上下文主要是 RTL,那么它将出现在您期望的位置到。

【讨论】:

  • +1。顺便说一句,要解决这个问题,如果双向渲染库没有提供一种方法来告诉它“这主要是 RTL 文本”,一个选择是在开头添加 U+200F,Unicode right-to-left mark并在渲染时间之前结束字符串。 (不是一个完美的解决方案,但可能适用于典型目的。)编辑添加:或者,类似地,写replace(u'\u05C3',u'\u200F')而不是replace(u'\u05C3','')(尽管这可能会造成更多这样的程序员困惑稍后)。
  • @ruakh 和 Ian ... 非常感谢你们的理论和实际解决方案
猜你喜欢
  • 2010-11-18
  • 1970-01-01
  • 2012-07-07
  • 2016-02-29
  • 2021-12-11
  • 2011-11-18
  • 2013-10-14
  • 2011-12-15
相关资源
最近更新 更多