python3用字符串中的信息替换字符串的一部分

2024-06-26 16:36:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python项目,我基本上是在编写一种自定义语言,为此我需要一个函数,可以用不同的数据(例如随机数)替换用户输入的字符串(很难解释我要做什么c:)

例如,用户在命令行中键入:

j@dev-box$ file write hi.txt {RANDOM_INT[1, 20]}

函数的运行方式如下:

parseOutput = parseFunction(userInputString) # userInputString = "file write hi.txt {RANDOM_INT[1,20]}

然后parseOutput将等于file write hi.txt 14,用随机数代替{random\u INT[x,x]}标记

我希望我把我要找的东西说清楚,因为这很难解释。你知道吗


Tags: 数据项目函数字符串命令行用户txtrandom
3条回答

这是你需要的吗?你知道吗

import re
import random
def parseFunction(string):
    matches = re.match('.*\{r\[(\d+),(\d+)\]\}.*',string)
    rand = random.randint(int(matches.groups()[0]), int(matches.groups()[1]))
    result = re.sub('\{r\[(\d+),(\d+)\]\}',str(rand),string)
    return result

您可以尝试使用Python中的str.find功能。Documentation

示例:

def parseFunction(input):
     index = input.find('{') # or look for more i.e. find('{RANDOM_INT')
     return input[:index] + ' ' + randomInt # remember to add the space

您可以使用内置库random.py中的random.randInt生成randomIntDocumentation

好吧,我建议您使用Jinja2模板,而不是使用Python模板字符串(虽然功能强大但有限)。你知道吗

这个模板引擎是开发web应用程序的著名工具。你知道吗

要实现自定义语言,可以使用过滤器。举个例子:

首先导入所需的模块:

import random

from jinja2.environment import Environment

定义一个过滤器来计算一个随机数,如下所示:

def random_int(value, x, y):
    return "{0}".format(random.randint(x, y))

注意:这里不使用参数。

定义Jinja环境并添加自定义筛选器:

env = Environment()
env.filters["RANDOM_INT"] = random_int

然后您可以这样使用它(您必须稍微更改用户输入以符合Jinja模板语法):

user_input = 'file write hi.txt {{ "" | RANDOM_INT(1, 10) }}'
template = env.from_string(user_input)
result = template.render()

结果是:

print(result)
# file write hi.txt 9

Avantages:Jinja可以为您检查语法和缺少的格式。你知道吗

编辑:更多示例

您可以更改要使用的环境配置 单花括号而不是双花括号:

env = Environment(variable_start_string="{", variable_end_string="}")

您可以使用内置函数和过滤器,而不是创建自定义过滤器。 例如:将range()函数与random过滤器一起使用:

user_input = 'file write hi.txt { range(10) | random }'
template = env.from_string(user_input)
result = template.render()
print(result)

最后,您可以使用自己的函数扩展全局上下文

env = Environment(variable_start_string="{", variable_end_string="}")
env.globals["RANDOM_INT"] = random.randint

user_input = 'file write hi.txt { RANDOM_INT(1, 10) }'
template = env.from_string(user_input)
result = template.render()
print(result)

相关问题 更多 >