regex - 用冒号替换每个奇怪的逗号 - 正则表达式
问题描述
我需要编写一个正则表达式,将每个奇怪的逗号转换为 python 中的冒号。
例如
"[2, 0.2520474110789976, 8, 0.25215388264234934, 3, 0.3560689678084889, 1, 0.3573715347893714, 4, 0.5626369616327825, 5, 0.793617535995843]"
转换为
"[2: 0.2520474110789976, 8: 0.25215388264234934, 3: 0.3560689678084889, 1: 0.3573715347893714, 4: 0.5626369616327825, 5: 0.793617535995843]"
我确实在 StackOverflow 上查看了其他问题,并找到了以下问题。但是,JS 版本似乎不适用于 Python。
我根据上面的链接做了以下
pattern = "(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)(,)(.*?,|)(?=.*?(?:,|$))"
stringa = re.sub(pattern,": ",flat_list_string)
并得到输出
"2: 8: 3: 1: 4: 5: 0.793617535995843"
而不是前面提到的那个。
我对正则表达式很陌生,所以我自己没有尝试太多。将不胜感激任何帮助。谢谢。
Update1:粘贴了我不正确的输出
解决方案
您似乎只是错误地使用了正则表达式。首先,您应该使用原始字符串文字r"..."
,这样您就不必转义反斜杠:
pattern = r"(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)(,)(.*?,|)(?=.*?(?:,|$))"
接下来,您应该将替换字符串更改为r":\2"
,这意味着:
后跟第 2 组。正则表达式匹配每个奇数逗号,以及它后面的所有字符,直到下一个偶数逗号。它将所有这些放入第 2 组。替换为 just:
也会替换所有匹配的字符。
stringa = re.sub(pattern, r":\2",flat_list_string)
JS 正则表达式还处理其他帖子的 OP 不想考虑的引号中的逗号,例如:
"hello, world", 1, "bye, world", 2
^. ^
these should not be counted as commas
如果您确实想计算这些逗号,那么您可以使用这个正则表达式:
,([^,]+(?:,|$))
并替换为:\1
.
推荐阅读
- javascript - 检测关闭窗口事件函数
- vba - vba power point:如何在 powerpoint 的表格单元格中更改选定的文本?
- c# - 如何在导航属性上将 IsModified 设置为 false
- apache-spark - Apache Spark Unpersist 和 Persist
- java - 在 tomee 服务器中重新部署 apache-cxf Web 服务后出现问题
- angular - 未处理的 Promise 拒绝:超时;区:
在角度 6 - android - 获取可绘制图像的路径,以便我可以将其发布到后端
- go - close(channel) 用于实现观察者模式
- reactjs - Babel 7 不会将 CONST 更改为 VAR
- excel - Excel::Writer::XLSX 内容不可读错误