簡體   English   中英

如何在sscanf()中使用RegEx在c中以特定方式標記字符串?

[英]How to use RegEx in sscanf() to tokenize a string a specific way in c?

我想在字符串中斷開以下文本:

John, Smith, 10 Maple Street, Cullowhee, NC, 28779, 828.123.4567
   Susan, thompson, 21 Oak Road, Webster, NC, 28711, 828.434.3232
Sarah, foster, 32 Sycamore Street, Sylva, NC, 28712, 828.112.3456
bruce, Hampton, 321 Linden Street, Dillsboro, NC, 28123, 828.432.7895
   Bill, Thompson, 141 Cedar Drive, Sauk City, WI, 43214, 415.323.2254

這是我到目前為止的內容:

void sort(FILE* in, FILE* out){

char buffer[LINE_LENGTH];
int i = 0;
int j = 0;

while(fgets(buffer, sizeof(buffer), in) != NULL) {
    sscanf(buffer , "%[^,],%[^,],%[^,],%[^,],"
            "%[^,],%[^,],%[^,]", 
            str1, str2, str3, str4, str5, str6, str7);
    i++;
}

無論我做什么,我似乎都無法擺脫SusanBill前面的空格/標簽。 我不確定我需要對sscanf(buffer , **"%[^,]**這個第一個正則表達式進行哪些更改sscanf(buffer , **"%[^,]**以刪除那些空格。我已經嘗試在第一個%[^,] [^a-zA-Z] %[^,]嘗試將%[^,]替換為%[^ ,] , %[^' ',], %[^' \\t',] 。更改不執行任何操作或僅使所有字符串消失,,,,,,,,,,,,,,,,,,,,,,,控制台上會顯示,,,,,,,,,,,,,,,,,,,,,,,

*scanf格式字符串中的空白字符會指示*scanf讀取並丟棄任意數量的空白字符(如果有),直到第一個非空白字符為止。

在C11標准中可以看到:

7.21.6.2 fscanf函數

[...]

  1. 通過讀取輸入直到第一個非空白字符(仍未讀取)或直到無法讀取更多字符為止,執行由空白字符組成的指令。 該指令永遠不會失敗。

因此,只需在所有%[之前添加一個空格,以便刪除前導空白字符。


注意:最后一行%[^,]需要更改為%[^\\n]因為該行后面沒有逗號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM