gpt4 book ai didi

python 3.5 : Formatting a String with Spaces

转载 作者:行者123 更新时间:2023-11-28 21:39:49 24 4
gpt4 key购买 nike

我见过类似的问题,但没有一个解决这个特定问题。我有一个使用 +、-、* 或/运算符的计算器表达式,我想对其进行标准化,以便任何人输入的任何内容都与我的程序想要的方式一致...

我的程序需要一个格式为“10 - 7 * 5/2 + 3”的字符串,每个值前后和中间都有空格。我想将某人输入的任何内容(例如“10-7*5/2+3”或“10-7*5/2 + 3”)转换为我指定的第一种格式。

我的第一个想法是将字符串转换为列表,然后在中间加入空格并连接前端和末尾的空格,但这样做的明显问题是“10”被拆分为“1”和“0”,加入后显示为“1 0”。

s = s.replace(" ", "")

if s[0] == "-":
s = "0" + s
else:
s = s

s = " " + " ".join(list(s)) + " "

我在想也许用 RegEx 做点什么可能会有帮助,但我不确定如何将其付诸实践。对我来说,主要的失误是让“10”和其他更高阶的数字在我这样做时不要 split 成它们的成分。

我在 python 3.5 中。

最佳答案

解决方案

如果您只处理非常简单的计算器表达式(即数字和操作数),这是一个想法。如果您还有其他可能的元素,则只需调整正则表达式即可。

使用正则表达式提取相关部分,忽略空格,然后使用连接将它们重新组合在一起。

def compose(expr):
elems = re.findall(r'(\d+|[\+,\-,\*,/])', expr) # a group consists of a digit sequence OR an operand
return ' ' + ' '.join(elems) + ' ' # puts a single space between all groups and one before and after

compose('10- 7*5/2 + 3')
# ' 10 - 7 * 5 / 2 + 3 '

compose('10-7*5/2+3')
# ' 10 - 7 * 5 / 2 + 3 '

正则表达式详解

re.findall 调用的核心是正则表达式:r'(\d+|[\+,\-,\*,/])'

第一位:\d 表示匹配一个数字+ 表示匹配一个或多个前面的表达式。所以一起 \d+ 意味着匹配一行中的一个或多个数字

第二位:[...]字符集 表示法。这意味着匹配集合中的任何字符之一。现在 +, -, * 都是特殊的正则表达式字符,所以你必须用反斜杠转义它们。正斜杠并不特殊,因此不需要转义。所以 [\+,\-,\*,/] 表示匹配 一个 中的任何 +、-、*、/。 p>

两个正则表达式之间的 | 是您的标准 OR 运算符。所以匹配第一个表达式或第二个表达式。括号是正则表达式中的组符号,表示您实际想要返回的正则表达式的部分。

关于 python 3.5 : Formatting a String with Spaces,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46282403/

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