我应该使用什么模式将0和1替换为指数



我试图在二项式表达式中使用regex替换某些值,以替换等效于已确定的常数x的值,该常数的指数为10,例如:binomial = "625x^4+1500x^3+1350x^2+540x^1+81x^0"

这是我使用的模式:r'[a-z][^][0]'

但是它没有返回期望值CCD_ 7。

我应该使用什么模式将'x^1''x^0'替换为像''这样的空字符或null字符?

您可以使用以下正则表达式:

x^([01])b

它将匹配x^,然后是01,并使用替换器函数进行替换,如果指数是1,则该函数将返回x,否则什么都没有:

binomial = "625x^4+1500x^3+1350x^2+540x^1+81x^0"
res = re.sub(r'x^([01])b', lambda m:'x' if m.group(1) == '1' else '', binomial)

输出:

625x^4+1500x^3+1350x^2+540x+81

在正则表达式中,^是一个特殊字符,它与行的开头匹配,也可用于排除组。如果要匹配文字^字符,则需要使用对其进行转义。此外,是python字符串中的一个特殊字符,因此您需要在开头添加"r"或使用\

这应该有效(运行代码片段来演示Python(:

import re
binomial = "625x^4+1500x^3+1350x^2+540x^1+81x^0"
pattern = r'[a-z]^[01]'
s = re.sub(pattern, "", binomial)
print(f"{s=}")
<script src="https://modularizer.github.io/pyprez/pyprez.min.js"></script>

从问题中还不清楚你是否想通过数学来评估字符串。如果您这样做,将需要一个更复杂的正则表达式和一个replacer函数。我会浏览教程,在这里玩正则表达式

import re
binomial = "625x^4+1500x^3+1350x^2+540x^1+81x^0"
pattern = r'([a-z])^(d*)'
x = 2
scope = locals()
def replacer(match):
var_name, pow = match.groups()
pow = int(pow)
r = eval(f"{var_name}**{pow}", scope)
print(f"{var_name} ** {pow} = {r}")
return f'*{r}'
s = re.sub(pattern, replacer, binomial)
s
<script src="https://modularizer.github.io/pyprez/pyprez.min.js"></script>

我假设您实际上想将x保持在x^1中,因此我们可以将此表达式与不属于匹配的lookbacking断言一起使用。


binomial = "625x^4+1500x^3+1350x^2+540x^1+81x^0"
print(re.sub(r"[a-z]^0|(?<=[a-z])^1b", "", binomial))
# Output 
625x^4+1500x^3+1350x^2+540x+81

[^...]not in。。。表达式^需要转义。

最新更新