【问题标题】:How to I find and replace after performing math on the string对字符串执行数学运算后如何查找和替换
【发布时间】:2021-08-03 04:00:56
【问题描述】:

我有一个包含以下字符串的文件

input complex_data_BITWIDTH;
output complex_data_(2*BITWIDTH+1);

假设 BITWIDTH = 8

我想要以下输出

input complex_data_8;
output complex_data_17;

如何在 python 中通过查找和替换来实现这一点。

【问题讨论】:

  • ()里面有东西的时候需要算术吗?
  • 括号()是否保证在您需要进行数学评估时出现?
  • 文件变量中的所有大写字符串都需要替换吗?
  • 我想计算表达式 inside(),它是 BITWIDTH 的函数。

标签: python python-3.x replace parameters find


【解决方案1】:

我建议查看re RegEx 库以进行字符串替换和字符串搜索,以及查看eval() 函数以对字符串执行数学运算。

示例(假设您要评估的内容周围总是有括号):

import re

BITWIDTH_VAL = 8
string_initial = "something_(BITWIDTH+3)"

string_with_replacement = re.sub("BITWIDTH", str(BITWIDTH_VAL), string_initial) 
# note: string_with_replacement is "something_(8+3)"

expression = re.search("(\(.*\))", string_with_replacement).group(1)
# note: expression is "(8+3)"

string_evaluated = string_with_replacement.replace(expression, str(eval(expression)))
# note: string_evaluated is "something_11"

【讨论】:

  • 谢谢!如何确保我在 () 中评估表达式,其中只有 BITWIDTH。我不想评价abc (def*ghi)
【解决方案2】:

如果您知道要更改的值,您可以为此使用变量,一个用于搜索的值,另一个用于新值

BITWIDTH = 8
NEW_BITWIDTH = 2 * BITWIDTH + 1

string_input = 'complex_data_8;'
string_output = string_input.replace(str(BITWIDTH), str(NEW_BITWIDTH))

如果你不知道值那么你需要先获取它然后再操作它

string_input = 'complex_data_8;'
bitwidth = string_input.split('_')[-1].replace(';', '')
new_bitwidth = 2 * int(bitwidth) + 1
string_output = string_input.replace(bitwidth, str(new_bitwidth))

【讨论】:

    【解决方案3】:

    试试这个,我不知道有没有捷径,但我认为它有效

    A="complex_data_13"
    no1='0'
    st1=''
    for x in A:
        if x.isdigit()==True:
            no1+=x
        else:
            st1+=x
    calc =2*int(no1)+1
    print(st1+str(calc))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-12
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 2011-08-22
      相关资源
      最近更新 更多