Python文本解析 - 你知道为啥双引号出现在我中间没有任何东西的地方吗? [复制]

Posted

技术标签:

【中文标题】Python文本解析 - 你知道为啥双引号出现在我中间没有任何东西的地方吗? [复制]【英文标题】:Python Text parsing - Do you know why the double empty quotes appear where for me there is nothing in between? [duplicate]Python文本解析 - 你知道为什么双引号出现在我中间没有任何东西的地方吗? [复制] 【发布时间】:2019-06-19 05:57:53 【问题描述】:

我正在解析一个包含许多行的文件,例如以下一行:

ocngPrbSerie : [prbFirst=0, prbLast=0, pdschModType=QPSK_MOD_SCH, usedSubFrameNo=[false, false, false, false, false, false, false, false, false, false], prbFirst=0, prbLast=0, pdschModType=QPSK_MOD_SCH, usedSubFrameNo=[false, false, false, false, false, false, false, false, false, false]]

我要做的是将除结构之外的所有内容(意思是 [[],=\s:) 放入引号中,以便在引号到位后重建字符串后插入到 mongodb 数据库中。我也想留下不带引号的数字。

到目前为止我所拥有的:

    f = open(filepath, "r")
    for line in f:
        x = re.split("([\[\],=\s:])", line)
        print(line)
        i = 0
        while i < len(x):
            if re.search("([\[\],=\s:])",x[i]) is None:
                x[i] = "\u0022" + x[i] + "\u0022"
            print(x[i])
            i = i+1

在放置引号方面,结果完全符合预期,但正如您在结果的第一行的打印中看到的那样,有些行是这样的“”(双空引号)但是如果您检查我正在处理的行 [ 和 之间没有任何内容,但打印看起来像 [ ""

“ocngPrbSerie”

"" : ""

"" [ "" "prbFirst" = "0" , ""

你知道为什么会出现双引号吗,对我来说中间什么都没有?

欢迎对代码进行任何改进,我是 python 的新手。

非常感谢

【问题讨论】:

我认为您需要删除捕获括号:x = re.split("[][,=\s:]", line) r"[][,=\s:]+" 可能会更好,因为它将匹配这些字符的 1 次或多次出现。 @Wiktor Stribiżew - 您假定的重复问题不是 OP 所要求的。从他在while i &lt; len(x) 循环中的代码可以明显看出,他知道模式中的组也作为结果列表的一部分返回。 他错过和询问的显然是空元素. 【参考方案1】:

你知道为什么会出现双引号吗,对我来说中间什么都没有?

这个问题很容易回答 - 如果要拆分的字符串有相邻的分隔符(如示例中的空格和冒号),则它们之间会产生一个空元素。

也欢迎对代码进行任何改进……

我只需在正则表达式中指定要替换的内容(即每个以字母开头的单词),然后在一个 re.sub() 中完成所有操作:

    f = open(filepath, "r")
    for line in f:
        print(line)
        print(re.sub('[A-Za-z]\w*', '"\g<0>"', line))

【讨论】:

感谢您的回答。预期的输出应该是这样的: "ocngPrbSerie" : ["prbFirst"=0, "prbLast"=0, "pdschModType"="QPSK_MOD_SCH", "usedSubFrameNo"=["false", "false", "false" , "假", "假", "假", "假", "假", "假", "假"], "prbFirst"=0, "prbLast"=0, "pdschModType"="QPSK_MOD_SCH "、"usedSubFrameNo"=["false"、"false"、"false"、"false"、"false"、"false"、"false"、"false"、"false"、"false"] 引用的所有内容除了在我的原始代码和数字中用作分隔符的“特殊字符”。并跳过空元素。问候

以上是关于Python文本解析 - 你知道为啥双引号出现在我中间没有任何东西的地方吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

10 个有用的 Python 字符串函数你必须知道

10 个有用的 Python 字符串函数你必须知道

sql语句中啥时候用单引号啥时候用双引号?如图中的红为啥用双引号?

python中的单引号,双引号和三双引号的区别

JSON解析错误,出现双引号,反斜杠处理办法

JSON解析值富文本