用re实现隐式乘法到显式乘法的转换

2024-05-04 06:35:16 发布

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

这个问题是关于何时将左侧的数字(例如1-13等)与右侧的变量(例如xx_12等)相乘

例如'1y'应转换为1*y'123y4'应转换为'123*y4',但'x_12y'不应更改(因为'x_12y'是有效的变量名,所以不应转换为'x_12*y'

我尝试了以下操作,这也错误地将'x_12y'转换为'x_12*y'

re.sub(r'([\d]+)([a-zA-Z_]+\w*)', r'\1*\2', '1y + x_12y + 123y4')
>> '1*y + x_12*y + 123*y4'

如果我像下面这样做一个反向查找,我仍然得到与上面相同的结果

re.sub(r'(?<![a-zA-Z_])([\d]+)([a-zA-Z_]+\w*)', r'\1*\2', '1y + x_12y + 123y4')
>> '1*y + x_12*y + 123*y4'

我尝试过搜索和其他一些方法,但仍然没有成功(对不起,我在正则表达式方面相对缺乏经验)

任何帮助都将不胜感激,谢谢


1条回答
网友
1楼 · 发布于 2024-05-04 06:35:16

你可以用

\b(\d+)([a-zA-Z]+\d*)\b
  • \b单词边界
  • (\d+)在组1中捕获1+个数字
  • ([a-zA-Z]+\d*)在组1中匹配1+字符a-z,后跟可选数字
  • \b单词边界

Regex demo

import re

print(re.sub(r'\b(\d+)([a-zA-Z]+\d*)\b', r'\1*\2', '1y + x_12y + 123y4'))

输出

1*y + x_12y + 123*y4

相关问题 更多 >