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

如何用Python正确解析含转义引号与空格的LR格式行?

正确解析LR格式行的方法

问题分析

要解析的行格式为LR "左侧字符串" "右侧字符串" [->],核心难点在于:

  • 左右字符串内部可能包含空格
  • 字符串内的引号是转义形式(\"),不能作为字符串结束的判定标志
  • 分隔左右字符串的是未被引号包裹的单个空格

解决方案1:改进状态机实现

你原有状态机的逻辑漏洞在于:遇到空格就标记分隔触发,但这个空格可能处于引号内部。正确逻辑应该是:仅当处于未被引号包裹的状态时,遇到的空格才是分隔符。

改进后的代码:

def parseLR(self, line) -> None:
    # 提取LR和->之间的核心内容
    core_line = line.split("LR ")[1].split(" ->")[0].strip()
    
    left_chars = []
    in_quote = False
    escaped = False
    
    for char in core_line:
        # 处理转义字符:遇到反斜杠则标记下一个字符为转义状态
        if char == '\\' and not escaped:
            escaped = True
            left_chars.append(char)
            continue
        
        # 处理引号:仅非转义的引号会切换包裹状态
        if char == '"' and not escaped:
            in_quote = not in_quote
        
        # 不在引号内且遇到空格时,左侧字符串结束
        if char == ' ' and not in_quote:
            break
        
        left_chars.append(char)
        escaped = False  # 转义状态仅持续一个字符
    
    left_str = ''.join(left_chars)
    # 提取右侧字符串:跳过左侧内容和分隔空格
    right_str = core_line[len(left_str)+1:].strip()
    
    print("左侧字符串:", left_str)
    print("右侧字符串:", right_str)

解决方案2:使用正则表达式

通过正则匹配带转义引号的字符串,核心模式为"((?:\\.|[^"\\])*)",含义是:

  • ":匹配开头引号
  • (?:\\.|[^"\\])*:非捕获组,匹配任意转义字符(\+任意字符)或非引号/非反斜杠的字符,重复任意次数
  • ":匹配结尾的非转义引号

代码实现:

import re

def parseLR(self, line) -> None:
    core_line = line.split("LR ")[1].split(" ->")[0].strip()
    # 匹配两个带转义引号的字符串
    pattern = r'"((?:\\.|[^"\\])*)"\s+"((?:\\.|[^"\\])*)"'
    match = re.fullmatch(pattern, core_line)
    
    if match:
        left_str = match.group(1)
        right_str = match.group(2)
        print("左侧字符串:", left_str)
        print("右侧字符串:", right_str)
    else:
        print("格式错误,无法解析")

测试验证

用你给出的三个测试案例验证,两种方案均能正确输出:

  1. 输入:LR "redirect":"\\" "\"" ->
    左侧字符串: redirect":"\,右侧字符串: "
  2. 输入:LR "name=\"uuid\" value=\"" "\""
    左侧字符串: name="uuid" value=",右侧字符串: "
  3. 输入:LR "<span class=\"pointsNormal\">" "<" ->
    左侧字符串: <span class="pointsNormal">,右侧字符串: <

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 00:12:43