使用sscanf的正则表达式忽略空格

时间:2011-03-18 18:42:21

标签: c

我正在读取输入文件:

          # This is a comment

 Matrix A =
                    //NOTICE THIS LINE


# matrix A (2 diagonal line segments)

100 100

200 200

我无法想象如何在没有空格的情况下从该行中提取矩阵A. 现在我有

sscanf(buffer,"%s%*[^\n]", word);

我试过

sscanf(buffer,"%*[ ]%s%*[^\n]", word); 

sscanf(buffer," %s%*[^\n]", word); 

以及其他许多人

它不会忽略空格,而是将它复制到单词变量以及矩阵a中。

4 个答案:

答案 0 :(得分:2)

如果您更清楚地了解您想要阅读的内容以及您想要忽略的内容,那将会有所帮助。由于目前尚不清楚,我将采取猜测:

sscanf(input_line, " %[^=]", matrix_name);

会留下尾随的空格,所以你需要单独修剪它:

rtrim(matrix_name);

rtrim类似于(为了清晰起见而无视健全/错误检查):

// warning: untested code.
void rtrim(char *string) { 
    int pos;

    for (pos=strlen(string); pos >= 0 && isspace(string[pos]); --pos)
        ;
    string[pos] = '\0';
}

答案 1 :(得分:1)

sscanf不处理正则表达式。

答案 2 :(得分:1)

如上所述,sscanf没有正则表达式。它需要一个格式说明符。

这是因为C没有正则表达式。

您需要自己解析每一行,或使用正则表达式库,例如PCRE

答案 3 :(得分:1)

很简单:

char s1[100],s2[100],s3[100];
if( 3==sscanf(buffer,"%s%s%s",s1,s2,s3) && !strcmp(s2,"A") && !strcmp(s3,"=") )
  puts(s1);