如何使用分隔符分割字符串,但在数据中转义分隔符?

2024-10-01 22:36:41 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的输入数据示例

data = "1000616411022604|1000616410908275|10.00|ktefwrj\"w\\|2014-02-25|debit|\|tcsceldxz"

我希望解析后的输出如下所示

["1000616411022604", "1000616410908275" , "10.00", "ktefwrj\"w\\", "2014-02-25", "debit", "\|tcsceldxz"]

但是我的输出是这样的

['1000616411022604', '1000616410908275', '10.00', 'ktefwrj"w\\', '2014-02-25', 'debit', '\\', 'tcsceldxz']

通过查看stackoverflow中的一些代码,我尝试使用re,但它不起作用

data = re.split(r'[^\\]|', data)

我正在尝试使用正则表达式在python中实现这一点。有人能帮我吗


Tags: 数据代码re示例datastackoverflowsplitdebit
2条回答

您应该首先对此页面进行审阅:https://docs.python.org/2.0/ref/strings.html

您可以看到,您试图保留的是转义序列,默认情况下,尤其是Python3在处理文本时自动格式化

如果您仍然希望得到与您显示的输出非常相似的结果,您可以尝试以下方法:

import string
data = '1000616411022604|1000616410908275|10.00|ktefwrj\"w\\|2014-02-25|debit|\|tcsceldxz'

def _parse(val):
    return r'{}'.format(val.replace('"', '\\"').replace("'", "\\'"))

_split_test = re.split(r'(?<=[a-zA-Z0-9_])\||\|(?=[0-9-])', str(_parse(data))) 
print(_split_test)

输出:

['1000616411022604', '1000616410908275', '10.00', 'ktefwrj\\"w\\', '2014-02-25', 'debit', '\\|tcsceldxz']

你想保留转义字符吗

如果是这样,则使数据=r'string'

当你打印时,额外的转义字符会浓缩下来,给你我认为你想要的

我使用data.split(“|”)生成列表

|会造成一点束缚,因此您尝试了以下方法:

re.split(r'(?<!\\)\|',data)

这也会导致问题,因为它会错过先前的拆分

您希望在最后一列中保留的这些内容有多普遍

您可以只对“|”进行拆分,然后对最后两列进行联接,将其中一个“|”放回原处,或者在拆分生成长度不合适的列表时有条件地将其放回原处

还请记住,很明显,某些列包含日期和某些类型的数据,因此,如果拆分导致循环,可以使用它来执行一些合理性检查

相关问题 更多 >

    热门问题