非字母分隔符

时间:2013-06-04 00:41:33

标签: c linux string unix delimiter

我正在尝试将字符串解析为字母,因此所有标点符号,数字,符号等都会被视为分隔符。这是我的问题:有一个很多的非字母字符可以分隔。

有没有办法过滤所有这样的字符?我的意思是有26个标准的英文字母和52个如果算上限。我知道ASCII / Unicode并不是真的以这种方式工作,但似乎应该有某种排他性方法,因为我可以提供我想要允许的所有字符,并在ASCII / Unicode表中建立其他所有字符分隔符。

所以我想我问,这样的事情可能吗?你能否隔离65-90和97-122(Unicode)范围之外的所有东西?

我目前正在使用它作为我的分隔符字符串,虽然它可能捕获了95%需要捕获的字符,但我还是喜欢更实质的字符:

#define DELIMITERS " 0123456789<>?:,./;'[]{}-=_+\\\""

4 个答案:

答案 0 :(得分:1)

执行此操作的库存方式为regular expression,例如[^a-zA-Z]+

答案 1 :(得分:1)

另一种方法 - 使用ctype.h中的isalpha()

char ok[80]={0x0};  // 80 bytes max
char *p=input_str;
char *q=ok;
for(*q=0x0; *p; p++)
{
    if( isalpha((int)*p) )
    {
        *q=*p;
        q++;
        *q=0x0;
    }
}
printf("%s\n", ok);

答案 2 :(得分:0)

这取决于您的输入数据是什么样的,以及您如何实现解析器。我假设您当前正在使用strsep()的内容,您当前的方法是合理的(但不是完整的非字母字符列表,请参阅#$%)。

如果您编写自己的标记化函数(或者如果要以编程方式构建分隔符字符串),请查看isalpha() / {{1}中的iswalpha()ctype.h }}

答案 3 :(得分:0)

Here您可以找到regex.h的文档。它是C的正则表达式库。

花点时间学习regular expressions,你会发现这个问题很容易解决;)。