python - 单个正则表达式中的多个替换

标签 python regex

我正在尝试从文件中读取一组数据,以便将其转换为complex。条目的形式为

line='0.2741564350068515+2.6100840481550604*^-10*I\n',

应该呈现为

'(0.2741564350068515+2.6100840481550604e-10j)'.

因此我需要插入一对括号并更改虚数单位和指数表示法的符号。我笨拙的解决方案是单独执行每个替换,

re.sub("\*\^","e",re.sub("[\.]{0,1}\*I","j)",re.sub("(^)","(",line))).strip(),

但这并不完全可读或理智。有没有办法使用单个正则表达式来进行此替换?

最佳答案

看来你根本不需要正则表达式就可以做到:

line='0.2741564350068515+2.6100840481550604*^-10*I\n'
print("({})".format(line.strip().replace("*^", "e").replace("*I", "j")))
# => (0.2741564350068515+2.6100840481550604e-10j)

请参阅IDEONE demo

一个“搞笑”regex way展示如何使用捕获组并使用 lambda 检查替换中捕获的内容:

import re
line='0.2741564350068515+2.6100840481550604*^-10*I\n'
print("({})".format(re.sub(r"(\*\^)|([.]?\*I)", lambda m: "e" if m.group(1) else "j", line.strip())))
# => (0.2741564350068515+2.6100840481550604e-10j)

如果组 1 ((\*\^)) 匹配,则替换为 e,如果组 2 匹配,则替换为 j .

请注意,{0,1} 限制量词的含义与 ? 量词相同 - 1 或 0 次。

关于python - 单个正则表达式中的多个替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37275735/

相关文章:

javascript替换括号内的文本

JavaScript 正则表达式匹配句子中的单词

javascript - 用表情符号替换字符串的最有效方法

python - 特征 : **kwargs allowing improperly named variables

python - 如何使用 matplotlib 绘制字节数据列表

python - 将列表拆分为字典

Python 3 异常处理和捕获

Python - XLSXWriter 每列写入字符

javascript - 如何验证带连字符的 13 位电话号码?

Java - 正则表达式全部替换不会替换匹配的文本