Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/30: Рейтинг темы: голосов - 30, средняя оценка - 4.63
44 / 45 / 15
Регистрация: 11.08.2010
Сообщений: 226

Регулярное выражение с отрицательным числом

07.03.2012, 19:00. Показов 6052. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Парсю html страничку с помощью регулярного выражения.
Регулярка
Code
1
{[^}]*\"id\":(\\d+)[^}]*avail:(\\d+)[^}]*cost:\\[(\\d+)?\\][^}]*
Поле avail содержит практически всегда (если не всегда) отрицательно число. Проверил регулярка работает, если заменить -1 (например) на 1, а с отрицательныи никак.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.03.2012, 19:00
Ответы с готовыми решениями:

Регулярное выражение для предложения с числом в начале
Здравствуйте. Помогите пожалуйста правильно составить регулярное выражение List<string> Kurs3 = new List<string>(); ...

Битовая операция с отрицательным числом
Есть такой код int main() { int k = 12; cout << (k & -k); return 0; } Выводит этот код

Нахождение НОД с отрицательным числом
Ребят, помогите разобраться. Имеется код нахождения НОД: int NOD(int a, int b) { while (a > 0 && b > 0) if...

7
107 / 107 / 9
Регистрация: 19.12.2010
Сообщений: 417
07.03.2012, 19:37
Здравствуйте.
1. При задании регулярных выражений лучше использовать следующую форму записи (на мой взгляд):
C#
1
string reg_exp_pat = @"Число: ""\d+""";
вместо:
C#
1
string reg_exp_pat = "Число: \"\\d+\"";
То есть ставьте символ @ перед строкой и используйте одинарный символ \ везде, а вместо \" ставьте "".
2. По вашему вопросу... \d+ ловит строку, состоящую только из последовательности цифр, минус там не учитывается, если вы хотите, чтобы учитывался минус, то вам надо составить регулярное выражение примерно так:
C#
1
var reg_exp_pat = @"{[^}]*""id"":(\d+)[^}]*avail:(-\d+)[^}]*cost:\[(\d+)?\][^}]*"
Если вам необходимо ловить как положительные, так и отрицательные числа, то нужно использовать квантификатор необязательности (или как он...):
C#
1
var reg_exp_pat = @"{[^}]*""id"":(\d+)[^}]*avail:(-?\d+)[^}]*cost:\[(\d+)?\][^}]*"
1
44 / 45 / 15
Регистрация: 11.08.2010
Сообщений: 226
08.03.2012, 01:41  [ТС]
Спасибо, нужна еще помощь!)
Увидел что у некоторых cost идет по другому, не
Code
1
cost:[145]
, а
Code
1
cost:[0,[],[[52722,5]]]
а у некоторых идет поле "sourcemore", а после в квадратных скобках фигурные, а в них уже идут блоки, и из-за этого не парсится.

Code
1
"sourcemore":[{"n":"Test","t":1,"ti":53881,"z":5733}]
Добавлено через 5 часов 19 минут
Code
1
cost:[0,[],[[52722,5]]]
это я смог распарсить, а вот с другим проблемы, никак не получается его обойти

В некоторых строках я обнаружил блок (структура похода, значения другие)
Code
1
"sourcemore":[{"n":"Test","t":1,"ti":53881,"z":5733}]
Строка без блока
Code
1
{"armor":0,"classs":4,"displayid":31616,"id":70113,"level":365,"name":"3Test","reqlevel":85,"slot":11,"slotbak":11,"source":[5],"subclass":-2,standing:0,react:[1,1],stack:[1],avail:-1,cost:[1014508]}
Строка с блоком
Code
1
{"armor":0,"classs":4,"displayid":31616,"id":70113,"level":365,"name":"3Test","reqlevel":85,"slot":11,"slotbak":11,"source":[5],"sourcemore":[{"n":"Test","t":1,"ti":53881,"z":5733}],"subclass":-2,standing:0,react:[1,1],stack:[1],avail:-1,cost:[1014508]}
Как видно они почти одинаковы, различие только в наличие блока. Но из-за этого блока регулярка не работает.
0
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
08.03.2012, 11:47
Heisenberg, это JSON?
0
44 / 45 / 15
Регистрация: 11.08.2010
Сообщений: 226
08.03.2012, 12:36  [ТС]
Да. Это я html страничку парсю. Парсю регуляркой
0
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
08.03.2012, 14:32
А может лучше JSON парсить библиотекой какой-нибудь, чем регулярками?
0
44 / 45 / 15
Регистрация: 11.08.2010
Сообщений: 226
08.03.2012, 14:55  [ТС]
Пробовал, не нашел хорошую библиотеку. Перепробовал довольно много библиотек
0
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
08.03.2012, 15:13
Цитата Сообщение от Heisenberg Посмотреть сообщение
Пробовал, не нашел хорошую библиотеку. Перепробовал довольно много библиотек
Ваш JSON:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
    "armor":0,
    "classs":4,
    "displayid":31616,
    "id":70113,
    "level":365,
    "name":"3Test",
    "reqlevel":85,
    "slot":11,
    "slotbak":11,
    "source":[5],
    "sourcemore":[{"n":"Test","t":1,"ti":53881,"z":5733}],
    "subclass":-2,
    standing:0,
    react:[1,1],
    stack:[1],
    avail:-1,
    cost:[1014508]
}
И плохая библиотека, которая хорошо парсит:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
 
class Program
{
    static void Main(string[] args)
    {
        string jsonObj = System.IO.File.ReadAllText("D:\\json.txt");
        JObject obj = (JObject)JsonConvert.DeserializeObject(jsonObj);
        Console.WriteLine(obj["armor"]);
        Console.WriteLine(obj["classs"]);
        Console.WriteLine(obj["displayid"]);
        Console.WriteLine(obj["id"]);
        Console.WriteLine(obj["level"]);
        JArray source = (JArray)obj["source"];
        /**
         * Даже с массивами можно работать
         */
        foreach (int num in source)
            Console.WriteLine(num);
    }
}
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.03.2012, 15:13
Помогаю со студенческими работами здесь

Если их произведение является отрицательным числом
Даны 3 числа:а,b,с. Эти числа целые. Если их произведение является отрицательным числом ,то вывести сумму квадратов этих чи сел, в...

Проверить является ли строка целым отрицательным числом
3. Написать программу, которая проверяет, является ли введенная с клавиатуры строка целым отрицательным числом.

Проверить, является ли число отрицательным трехзначным числом
1. Дано целое число. Проверить является ли данное число отрицательным трехзначным числом. 2. Разработать программу для вычисления...

Почему не выводится знак перед отрицательным числом?
INT - это знаковый тип. 0xffff отрицательное число, а выводится как положительное 0xffff = 65535 #include <windows.h> ...

Проверка текстового поля на заполнение отрицательным числом
Есть текстовое поле. По работе кода мне нужно проверять его на незаполненность и если поле не пустое, то необходимо внести значение из поля...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru