2024-09-27 07:18:08 发布
网友
我正在做一个项目,我想在其中加入一个字符串,如“F100<;30S30”
F100将使海龟向前移动100,<;30将海龟旋转30度,S30将绘制半径为30的圆。你知道吗
我可以让程序解释一个命令,例如F100,但是我不能让它解释上面显示的长字符串。我可以用什么方法来解释这个。非常感谢。你知道吗
我不知道你的海龟能接受什么样的命令,所以这个例子可能并不完全适合你的用例。但据我所见,你可以用正则表达式来解决这个问题。你知道吗
假设一个命令由两部分组成:一个字符表示操作(F,<,S,等等),一个数字表示大小(100,30,等等)。您的字符串有几个这样的背靠背。我们可以做的是构建一个正则表达式,它将识别字符串中此操作数模式的所有实例。你知道吗
F
<
S
100
30
仅使用命令F、<和S,以下正则表达式将起作用:
regex = r'([FS<]\d+)'
我们把这个打开。你知道吗
r'...'
\
()
[]
\d
[0123456789]
+
现在可以使用python的re库来查找字符串中的所有匹配项。findall方法是我们在这里需要的:它接受一个regex字符串和一个搜索字符串,并按顺序返回搜索字符串中与regex字符串匹配的模式列表。你知道吗
re
findall
>>> import re >>> search = 'F100<30S30' >>> regex = r'([FS<]\d+)' >>> commands = re.findall(regex, search) >>> print(commands) ['F100', '<30', 'S30']
现在,您已经将一个字符串转换为一个较小字符串的列表(commands),每个字符串表示一个命令。现在可以遍历commands并分别执行每个命令。你知道吗
commands
有关python中正则表达式的更多信息,可以查看the ^{} module's documentation。你知道吗
我不知道你的海龟能接受什么样的命令,所以这个例子可能并不完全适合你的用例。但据我所见,你可以用正则表达式来解决这个问题。你知道吗
假设一个命令由两部分组成:一个字符表示操作(
F
,<
,S
,等等),一个数字表示大小(100
,30
,等等)。您的字符串有几个这样的背靠背。我们可以做的是构建一个正则表达式,它将识别字符串中此操作数模式的所有实例。你知道吗仅使用命令
F
、<
和S
,以下正则表达式将起作用:我们把这个打开。你知道吗
r'...'
将这个字符串指定为“原始字符串”,这是我们通常用于正则表达式的。这意味着字符串中通常是转义字符的字符,如\
,将不会被视为转义字符。你知道吗()
将其中的任何内容标记为regexmatch——这意味着,当我们通过字符串时,与括号内的模式匹配的任何内容都将被保存并输出。你知道吗[]
表示一组字符-这将匹配括号内包含的任何字符。因此,在本例中,正则表达式将查找F
、S
或<
。你知道吗\d
是[0123456789]
的简写——也就是说,它匹配任何数字。你知道吗+
是我们附加到\d
的符号。这告诉正则表达式要“贪婪”,这意味着要包含尽可能多的数字,而不是只包含一个。你知道吗现在可以使用python的
re
库来查找字符串中的所有匹配项。findall
方法是我们在这里需要的:它接受一个regex字符串和一个搜索字符串,并按顺序返回搜索字符串中与regex字符串匹配的模式列表。你知道吗现在,您已经将一个字符串转换为一个较小字符串的列表(
commands
),每个字符串表示一个命令。现在可以遍历commands
并分别执行每个命令。你知道吗有关python中正则表达式的更多信息,可以查看the ^{} module's documentation 。你知道吗
相关问题 更多 >
编程相关推荐