python - 如何标记字符串(其中包含有关数学计算和 float 的数据)?

标签 python algorithm stringtokenizer

我正在尝试标记一个字符串(其中包含有关数学计算的数据)并创建一个列表。

例如,

a = "(3.43 + 2^2 / 4)"

function(a) => ['(', '3.43', '+', '2', '^', '2', '/', '4']

我不想使用外部导入(比如 nltk)。

我面临的问题是保持 float 的完整性。

摸索了好几个小时,做了2个函数,遇到 float 就出问题了。

这是我所做的:

a = "(3.43 + 2^2 / 4)"
tokens = []

for x in range(1, len(a)-1):
no = []

if a[x] == ".":
    y = x
    no.append(".")

    while is_int(a[y-1]):
        no.insert(0, a[y-1])
        y -= 1

    y = x

    while is_int(a[y+1]):
        no.extend(a[y+1])
        y += 1

    token = "".join(no)
    no = []
    tokens.append(token)

else:
    tokens.append(a[x])

print(tokens)

输出:

['3', '3.43', '4', '3', ' ', '+', ' ', '2', '^', '2', ' ', '/', ' ', '4']

最佳答案

您可以使用 Python 自己的分词器,它是标准 API 的一部分:

from tokenize import tokenize
from io import BytesIO

source = "(3.43 + 2^2 / 4)"
tokens = tokenize(BytesIO(source.encode('utf-8')).readline)
non_empty = [t for t in tokens if t.line != '']

for token in non_empty:
    print(token.string)

将打印:

(
3.43
+
2
^
2
/
4
)

更多信息:https://docs.python.org/3/library/tokenize.html

关于python - 如何标记字符串(其中包含有关数学计算和 float 的数据)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56129034/

相关文章:

python - 从另一个 csr_matrix 的一行创建 csr_matrix 的平铺操作

python - 使用python(acora)查找包含关键字的行

python - 如何在我的 github 自述文件中设置 pyversions 图标?

algorithm - 如何有效地存储具有高度冗余值的矩阵

java - StringTokenizer 错误

python - Python 中是否有一个函数可以生成给定字母表中所有长度为 n 的字符串?

java - 遗传算法的适应度拒绝让步

algorithm - 如何使用 Boost 1.41.0 图形布局算法

java - 使用 StringTokenizer 获取单词

java - 从文本文件写入 Java ArrayList 给我带来了问题