>> foo_eq-6ren">
gpt4 book ai didi

python - Python 方程替换中的正则表达式

转载 作者:行者123 更新时间:2023-11-28 22:35:45 24 4
gpt4 key购买 nike

我对正则表达式和 Python 比较陌生,遇到以下情况。我想采用一个等式字符串,例如 "A + B + C + 4D",并将数字 1 放在所有前面没有数字的变量前面。所以像这样:

>>> foo_eqn = "A + B + C + 4D"
>>> bar_eqn = fill_in_ones(foo_eqn)
>>> bar_eqn
"1A + 1B + 1C + 4D"

经过一番研究和询问,我想到了

def fill_in_ones(in_eqn):
out_eqn = re.sub(r"(\b[A-Z]\b)", "1"+ r"\1", in_eqn, re.I)
return(out_eqn)

但是,看起来这只适用于前两个变量:

>>> fill_in_ones("A + B")
1A + 1B
>>> fill_in_ones("A + B + E")
1A + 1B + E
>>> fill_in_ones("2A + B + C + D")
2A + 1B + 1C + D

有什么明显的我遗漏的吗?谢谢!

最佳答案

看起来 re.I(忽略大小写标志)是罪魁祸首:

>>> def fill_in_ones(in_eqn):
... out_eqn = re.sub(r"(\b[A-Z]\b)", "1"+ r"\1", in_eqn)
... return(out_eqn)
...
>>>
>>> fill_in_ones("A + 3B + C + 2D + E")
'1A + 3B + 1C + 2D + 1E'

这是因为 re.sub 的下一个位置参数是 count,不是 flags。你需要:

def fill_in_ones(in_eqn):
out_eqn = re.sub(r"(\b[A-Z]\b)", "1"+ r"\1", in_eqn, flags=re.I)
return(out_eqn)

不幸的是,re.I 标志恰好是 2:

>>> import re
>>> re.I
2

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com