我正在尝试从文件中读取一组数据,以便将其转换为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/