You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中检测UTF-8字符串中的左右方向标记及括号方向

检测UTF-8字符串中括号的RTL/LTR属性及方向标记

直接操作Unicode字符就能实现你的需求,Python里的字符串本身就是Unicode序列,不用额外编码解码。下面是具体实现:

核心思路

  1. RLM(右到左标记)和LRM(左到右标记)对应固定的Unicode码点,直接判断字符的码点即可识别。
  2. 括号的RTL/LTR属性可以通过字符的双向排版类型判断,用unicodedata模块就能获取这个属性。

完整代码

import unicodedata

def is_right_to_left_mark(char):
    # RLM的Unicode码点:U+200F
    return ord(char) == 0x200F

def is_left_to_right_mark(char):
    # LRM的Unicode码点:U+200E
    return ord(char) == 0x200E

def get_bidi_type(char):
    try:
        return unicodedata.bidirectional(char)
    except ValueError:
        return ""

# 测试用例,包含RTL括号、普通LTR括号、RLM/LRM标记
test_text = "测试文本:﴾RTL括号﴿ (LTR括号) \u200F---RLM标记---\u200E"

for char in test_text:
    print(char)
    if is_right_to_left_mark(char):
        print("---RLM---")
    elif is_left_to_right_mark(char):
        print("---LRM---")
    
    # 判断括号的方向属性
    bidi_type = get_bidi_type(char)
    if char in "()[]{}":
        print(f"普通LTR括号,双向类型: {bidi_type}")
    elif bidi_type in ('R', 'AL'):
        print(f"RTL字符,双向类型: {bidi_type},属于RTL类括号")

说明

  • 不用对UTF-8字符串做编码解码操作,Python遍历字符串时拿到的每个char都是完整的Unicode字符。
  • RLM对应\u200F,LRM对应\u200E,通过ord(char)获取字符的十进制码点,和十六进制的0x200F/0x200E对比就能识别。
  • 用unicodedata.bidirectional()可以获取字符的双向排版类型:
    • 'L' 代表LTR(从左到右)字符
    • 'R'/'AL' 代表RTL(从右到左)字符
  • 注意:普通LTR括号(如())在RTL语境下排版时会反转显示,但它们本身的Unicode属性还是LTR,若要判断实际显示的开/闭状态,还需要结合文本的整体排版方向,不过如果只是判断字符本身的RTL/LTR属性,用上述方法足够。

内容的提问来源于stack exchange,提问作者Chana Drori

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 01:31:35