首页 > 解决方案 > 用冒号替换每个奇怪的逗号 - 正则表达式

问题描述

我需要编写一个正则表达式,将每个奇怪的逗号转换为 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:​​粘贴了我不正确的输出

标签: regex

解决方案


您似乎只是错误地使用了正则表达式。首先,您应该使用原始字符串文字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.


推荐阅读