gpt4 book ai didi

python - 如何将字符串拆分为标记?

转载 作者:太空狗 更新时间:2023-10-29 18:23:13 25 4
gpt4 key购买 nike

如果我有一个字符串

'x+13.5*10x-4e1'

我如何将其拆分为以下 token 列表?

['x', '+', '13', '.', '5', '*', '10', 'x', '-', '4', 'e', '1']

目前我正在使用 shlex 模块:

str = 'x+13.5*10x-4e1'
lexer = shlex.shlex(str)
tokenList = []
for token in lexer:
tokenList.append(str(token))
return tokenList

但这会返回:

['x', '+', '13', '.', '5', '*', '10x', '-', '4e1']

所以我试图将字母与数字分开。我正在考虑采用同时包含字母和数字的字符串,然后以某种方式拆分它们,但不确定如何执行此操作或之后如何将它们全部添加回列表中。 token 保持有序很重要,我不能有嵌套列表。

在理想世界中,e 和 E 不会以相同的方式被识别为字母,所以

'-4e1'

会变成

['-', '4e1']

但是

'-4x1'

会变成

['-', '4', 'x', '1']

有人可以帮忙吗?

最佳答案

使用正则表达式模块的split()函数,分割在

  • '\d+' -- 数字(数字字符)和
  • '\W+' -- 非单词字符:

代码:

import re

print([i for i in re.split(r'(\d+|\W+)', 'x+13.5*10x-4e1') if i])

输出:

['x', '+', '13', '.', '5', '*', '10', 'x', '-', '4', 'e', '1']

如果您不想分隔点(作为表达式中的 float ),那么您应该使用:

  • [\d.]+ -- 数字或点字符(尽管这允许您编写:13.5.5

代码:

print([i for i in re.split(r'([\d.]+|\W+)', 'x+13.5*10x-4e1') if i])

输出:

['x', '+', '13.5', '*', '10', 'x', '-', '4', 'e', '1']

关于python - 如何将字符串拆分为标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18312447/

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