Python 实例|分隔字符串并忽略引号内的内容

该文章介绍了如何使用Python编写一个名为`split_by_ignore_quote`的函数,它能按指定分隔符切分字符串,同时忽略引号内的部分。函数接受字符串、分隔符和引号类型作为参数,提供示例展示了其功能。
摘要由CSDN通过智能技术生成

按 sep 切分字符串,并忽略被引号框柱的部分中的 sep。

from typing import List


def split_by_ignore_quote(s: str, sep: str, quote_mark=None, escape_mark="\\") -> List[str]:
    """按 sep 切分字符串,并忽略被引号框柱的部分中的 sep

    Parameters
    ----------
    s : str
        目标字符串
    sep : str
        分隔符
    quote_mark : Set[str], default = {"'", "\""}
        引号符
    escape_mark : str, default = "\\"
        转义符

    Returns
    -------
    List[str]
        切分后的字符串列表

    Examples
    --------
    >>> split_by_ignore_quote(r"1,'2,3',4", sep=",")
    ['1', "'2,3'", '4']
    >>> split_by_ignore_quote(r"1,\\'2,3,4", sep=",")
    ['1', "'2", '3', '4']
    >>> split_by_ignore_quote(r"1,'2,3,4", sep=",")
    ['1', "'2,3,4"]
    """
    if quote_mark is None:
        quote_mark = {"'", "\""}

    assert escape_mark not in quote_mark, "escape mark in quote mark"
    assert sep not in quote_mark, "separator mark in quote mark"
    assert escape_mark != sep, "escape mark equal separator mark"

    quote = False  # 是否在引号中
    escape = False  # 前一个字符是否是转义符
    res = [[]]
    for ch in s:
        # 上一个字符是转义符:直接添加当前字符,并将转义标识置为 False
        if escape is True:
            res[-1].append(ch)
            escape = False

        # 当前字符是转义符:不添加当前字符,并将转义标识置为 True
        elif ch in escape_mark:
            escape = True

        # 当前字符不是转义符,上一个字符也不是转义符
        else:
            # 当前不在括号范围内,且当前字符为分隔符:执行一次切分
            if ch == sep and quote is False:
                res.append([])  # 执行一次切分

            else:
                res[-1].append(ch)

                # 当前在引号范围中:直接添加当前字符,并判断是否为引号,如果为引号则调整引号范围
                if ch in quote_mark:
                    quote = not quote

    return ["".join(item) for item in res]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值