如何在Python中进行strtok()类型的解析?

问题描述 投票:0回答:3

标题我如何在Python中执行strtok()在C中所做的事情?表明它应该回答我的问题,但我正在寻找的特定strtok()行为正在破坏中的任何一个字符分隔符字符串。也就是说,给定:

const char* delim = ", ";
str1 = "123,456";
str2 = "234 567";
str3 = "345, 678";

strtok() 查找数字的子串,无论 delim 中存在多少个字符。 Python 的 split 期望整个定界字符串都在那里,所以我不能这样做:

delim = ', '
"123,456".split(delim)

因为它没有找到 delim 作为子字符串并返回单个元素的列表。

python strtok
3个回答
5
投票

如果您知道标记将是数字,您应该能够使用 Python 的

split
模块中的
re
函数:

import re
re.split("\D+", "123,456")

更一般地,您可以匹配任何分隔符:

re.split("[ ,]", "123,456")

或:

re.split("[" + delim + "]", "123,456")

1
投票

使用

replace()
将分隔符全部标准化为同一字符,并对该字符使用
split()
-ting,是处理更简单情况的一种方法。对于您的示例,
replace(',',' ').split()
应该可以工作(将逗号转换为空格,然后使用
split
的特殊无参数形式来分割空格)。

在 Python 中,当事情开始变得对于

split
replace
来说太复杂时,你通常会转向
re
模块;请参阅 Sam Mussmann 更一般的答案。


0
投票
def strtok(mystr,delim):
    nlist=[]
    nelem=""
    
    for c in mystr:
        if c in delim:
            if nelem!="":
                nlist.append(nelem)
                nelem=""
            nlist.append(c)
        else:
            nelem+=c
            
    if nelem!="":
        nlist.append(nelem)
            
    return nlist
    
print(strtok("wow - noway. - can't be.",".-' "))
print(strtok("123,456",", "))
© www.soinside.com 2019 - 2024. All rights reserved.