scanf中的正则表达式?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了scanf中的正则表达式?相关的知识,希望对你有一定的参考价值。

是否有任何正则表达式/方法来解决问题:我想在C中解析一个总是这样的文件:

数字(单词)

fscanf(file, "%d (%s) %d", ...)

有效但不是当它是复合词时,我该怎么做?


[来自comment的更新]

还有很多其他的变量,但我只说3让它更容易,没有多余。是的[word]可以包含空格

答案

只需阅读整行,并使用strtok()通过搜索()作为分隔符来分解三个部分的字符串。

在那之后,只是部分地做sscanf()

char  line[256];  // Make sure this is large enough for all possible lines.
char* left;
char* word;
char* right;

// Read the line from file. Make sure you don't go over its size.

left  = line;
word  = strtok(line, "(");
right = strtok(NULL, ")");

因为strtok()(取代),你已经有了指向你的word的指针。现在你只需使用sscanf()得到两个整数。

int leftInt;
int rightInt;
sscanf(left,  "%d", &leftInt);
sscanf(right, "%d", &rightInt);

这是一个简单的词法分析器,没有使用@AhmedMasud提到的Lex

“Lexical analyzer”的另一个术语是“tokenizer”,这就是strtok()函数的名称来源。

你不必担心()之间的字符/空格/ ...是什么,只要你能保证它不是()

以上是关于scanf中的正则表达式?的主要内容,如果未能解决你的问题,请参考以下文章

通过 Java 正则表达式提取 semver 版本字符串的片段

text 正则表达式片段

markdown 正则表达式模式片段

正则表达式匹配特定的 URL 片段而不是所有其他 URL 可能性

循环通过 python 正则表达式匹配

asp.net 使用正则表达式验证包含打开/关闭括号片段的属性字符串