Я хочу извлечь только строки между <AAA> and </AAA>
как я могу их извлечь? пожалуйста, помогите Пример: <AAA>hello world</AAA>
this is a text
<AAA>this is another text</AAA>
Результат: привет мир это другой текстКак найти текст между двумя конкретными строками в c
ответ
Если ваши потребности разборе достаточно велики, вы можете посмотреть на разборе библиотеки, как libxml. В противном случае strstr ваш друг:
#include <stdio.h>
#include <stdlib.h>
int main() {
char *res;
size_t len;
const char *p1, *p2;
char text[] = "<AAA>hello world</AAA>";
p1 = strstr(text, "<AAA>");
if (p1 == NULL) return -1;
p1 += 5;
p2 = strstr(p1, "</AAA>");
if (p2 == NULL) return -2;
len = p2 - p1;
res = malloc(len + 1);
if (res == NULL) return -3;
strncpy(res, p1, len);
res[len] = '\0';
printf("'%s'\n", res);
return 0;
}
стандартный вывод: 'привет мир'
или даже лучше (нет необходимости таНос):
#include <stdio.h>
int main() {
const char *p1, *p2;
char text[] = "<AAA>hello world</AAA>";
p1 = strstr(text, "<AAA>");
if (p1 == NULL) return -1;
p1 += 5;
p2 = strstr(p1, "</AAA>");
if (p2 == NULL) return -2;
printf("'%.*s'\n", (int)(p2 - p1), p1);
return 0;
}
благодарит за вашу помощь. очень ценю :-) – Erfan
Выполните следующие действия:
Прочитайте весь файл в массиве
char
, перераспределив этот массив, если необходимо, null завершите работу массива.Используйте
strstr()
, чтобы найти нахождение"<AAA>"
. сохранить позицию, если она найдена, если нет.С этой позиции используйте
strstr
, чтобы найти"</AAA>"
.вывод текста между ними и перезапуск.
Вы можете использовать библиотеки XML для разбора текста, я Recommand с помощью libexpat или libxml2 или minixml, более легче анализировать XML документ с этими библиотеками
Например, для minixml (из официальной документации minixml):
Загрузка XML
Вы загружаете файл XML с помощью функции mxmlLoadFile:
FILE *fp;
mxml_node_t *tree;
fp = fopen("filename.xml", "r");
tree = mxmlLoadFile(NULL, fp,
MXML_TEXT_CALLBACK);
fclose(fp);
mxmlEntityGetValue
Получить символ, соответствующий имени объекта.
int mxmlEntityGetValue (
const char *name
);
Параметры
name
Entity name
Возвращаемое значение
Character value or -1 on error
Обсуждение
The entity name can also be a numeric constant. -1 is returned if the name is not known.
Спасибо за ваш ответ и рекомендацию :-) – Erfan
Вот мой код:
#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[]) {
const char *srcStr = "<AAA>hello world</AAA> this is a text <AAA>this is another text</AAA>";
const char *firstDelim = "<AAA>";
const char *lastDelim = "</AAA>";
char extStr[128] = "";
int srcStrLen, firstDelimLen, lastDelimLen;
int i, catIdx = 0;
srcStrLen = strlen(srcStr);
firstDelimLen = strlen(firstDelim);
lastDelimLen = strlen(lastDelim);
for (i=0; i<srcStrLen; i++){
if (strncmp(&srcStr[i], firstDelim, firstDelimLen) == 0) {
i += firstDelimLen;
catIdx = i;
}
else if (strncmp(&srcStr[i], lastDelim, lastDelimLen) == 0) {
strncat(extStr, &srcStr[catIdx], i - catIdx);
i += lastDelimLen;
if (i != srcStrLen){
strcat(extStr, " ");
}
}
}
printf("%s\n", extStr);
return 0;
}
Спасибо за вашу помощь и поддержку :-) !! – Erfan
Как уже было сказано выше, это выглядит как XML-парсера вам друга, см предложил библиотеки для XML-анализа. Если каким-то чудом XML-парсер не сможет проанализировать ваш текст, потому что он не является допустимым XML, вы можете попробовать и использовать HTML-парсер (например, gumbo-query или любой другой, который вы можете найти). Если HTML-парсер не работает, вам, скорее всего, придется написать собственный текстовый синтаксический анализатор. Это может быть уменьшено, потому что на самом деле он не отвечает на вопрос, но я думаю, что во всех других ответах нет хотя бы предложения о том, что попробовать, если XML-парсеры и XML-подобные парсеры не работают.
ничего себе! Большое спасибо. да, это то, чего я хочу, очень ценный. Это казалось более логичным способом – Erfan
- 1. Python - количество символов между двумя конкретными строками
- 2. Найти код между двумя строками
- 3. Regex получить HTML между двумя конкретными строками
- 4. Поиск разницы между двумя конкретными строками
- 5. Использование «AWK», чтобы найти строку между двумя другими конкретными строками:
- 6. Подсчет строк между двумя конкретными строками
- 7. Regex найти определенную строку только между двумя другими конкретными строками
- 8. Извлечь строку между двумя конкретными строками в C
- 9. Заменить текст между двумя строками
- 10. Заменить текст между двумя строками
- 11. Удалить текст между двумя строками
- 12. Найти строку между двумя конкретными словами
- 13. Найти подстроку между двумя строками
- 14. Regex найти между двумя строками
- 15. Как найти подстроку между двумя строками?
- 16. Как найти разницу между двумя строками?
- 17. Текст между двумя конкретными словами Java
- 18. Удалить текст между двумя строками (html tags)
- 19. Найти текст между двумя строками глобально в файле Unix
- 20. Удаление определенного символа в любом месте между двумя конкретными строками?
- 21. Получить строки между двумя конкретными строками в Lua
- 22. Найти несколько пробелов между двумя строками динамически
- 23. Найти все рекорды текста между двумя строками
- 24. Удалить текст между двумя строками sed, awk
- 25. Найти строку между двумя строками в JQuery
- 26. Получите текст между двумя строками (HTML) в C#
- 27. найти строку между двумя строками в файле
- 28. Найти кривую между двумя строками в javascript
- 29. GREP из n строк текста между двумя конкретными строками
- 30. Удалить символ новой строки между двумя конкретными строками
Вы хотите написать XML-парсер? – Rabbid76
ну, вероятно, вам, вероятно, придется писать собственный синтаксический анализатор текста, но это действительно зависит от тегов. Например, C имеет синтаксический анализатор для html5, и я уверен, что синтаксический анализатор xml можно найти, но если ваш текст не является допустимым xml ot html, вам, скорее всего, придется написать собственный парсер/ –
извините, позвольте мне сказать ясно – Erfan