python - Python re.sub 如何将字符串中的每个 0 替换为 2 当旁边没有 1 时?
问题描述
我对正则表达式完全陌生,现在我有以下任务:
我有一个看起来像这样的字符串:001000X00X001X00X
现在我想用 2 替换每个 0,而它旁边没有没有被 X 分隔的 1,因此示例字符串应更改为:001000X22X001X22X
我试图使用这样的东西来做到这一点:
s = re.sub(r'X0+X', 'X2+X', s);
因此它会搜索以 X 开头和结尾的子字符串,并且在它们之间有一个随机数的“0”,但显然每个像这样的子字符串都被更改为“X2+X”。如何计算 0 的数量并用 2 替换每一个?
解决方案
我太慢了,无法提供正则表达式答案(@Wiktor Stribiżew,你太快了!),所以这里有一个使用分割字符串作为中间的替代方法:
'X'.join([re.sub('0', '2', i) if not '1' in i else i for i in s.split('X')])
如果字符串只包含 0/1/X,这将是一个更简单/更快的选择:
'X'.join(['2'*len(i) if not '1' in i else i for i in s.split('X')])
注意。在@JvdV 的评论之后,这里是@WiktorStribiżew 的答案的修复:
re.sub(r'(?<=X)0+(?=X)', lambda x: '2'*len(x.group()), 'X'+s+'X')[1:-1]
输出:'22X001000X22X001X22X'
推荐阅读
- powershell - 是否可以在本地触发 Power Automate Desktop 流,而无需通过 Internet 连接到云?
- python - 将数据框中的列表与另一个列表进行比较,如果未找到,则将其保存在另一列中
- ios - 没有在移动 ios 魅力报告中获取屏幕截图
- css - 如何在 Cuba Platform 中为一个表格列添加填充?
- java - AWS Sam:无法创建/更新堆栈错误
- python - 启动 Jupyter 实验室目录后,有没有办法更改它?
- tensorflow - 如何将一层中神经元的输出相乘?(最好在 Keras 或 Tensorflow 中)
- odoo - 如何在odoo报告中将url放在QR中
- java - 我们如何在java中的对象数组中为嵌套类创建一个实例?
- mysql - 在表中归档没有数据和时间列的 MYsql 数据库