regex 如何使用正则表达式将'+'替换为'plus'[已关闭]

lxkprmvk  于 2023-04-13  发布在  其他
关注(0)|答案(1)|浏览(136)

已关闭,该问题需要details or clarity,目前不接受回答。
**想要改进此问题?**通过editing this post添加详细信息并澄清问题。

昨天关门了。
Improve this question
我想换掉

[0-9]+e|E\+[0-9]+ with [0-9]+e|Eplus[0-9]+

[0-9]+e|E-[0-9]+ with [0-9]+e|Eminus[0-9]+

我尝试了这个python脚本:

re.sub(r'[0-9]+[eE]\+[0-9]+$', r'[0-9]+[eE]plus[0-9]+$', 'a1e+1b+a')

我希望得到'a1eplus1b+ a',但它不起作用。如何正确地做到这一点?

igsr9ssn

igsr9ssn1#

re.sub的第二个参数不是正则表达式。您需要使用完全不同的语法来替换字符串。简单地说,您可以使用\1\2等引用编号匹配组;

re.sub(r'([0-9]+[eE])\+([0-9]+)', r'\1plus\2', 'a1e+1b+a')

...或者,您可以使用lookarounds来匹配和替换您真正想要替换的部分:

re.sub(r'(?<=[0-9][eE])\+(?=[0-9])', r'plus', 'a1e+1b+a')

第二个也很好地扩展到一个解决方案,您可以在其中一举执行减号和加号:

re.sub(r'(?<=[0-9][eE])[-+](?=[0-9])',
       lambda match: {'-': 'minus', '+': 'plus'}[match.group()],
       'a1e+1b+a')

在这里,lambda表达式接收对应于匹配的re.Match对象,并使用其.group()方法提取匹配的字符串。我们将其用作替换字典的索引,以获得对应于'plus''minus'的拼写字符串。
Python的re模块不允许lookarounds是可变长度的,但这在这里并没有什么用处,所以我只是在[0-9]之后去掉了+。还要注意,我去掉了$,这阻止了测试用例的匹配。

相关问题