C# problem z wyciągnięciem ciągu znaków Regex.Match

0

Witajcie przerzucam się z Pythona na C# i napotkałem problem, mam ciąg znaków:
"data_sypialnia": "05.10.2021", "godzina_sypialnia": "08:53", "temperatura_sypialnia": 23.6, "cisnienie_sypialnia": 990.4, "wilgotnosc_sypialnia": 60.2.

Próbuje wyciągnąć >> "temperatura_sypialnia": 23.6 << mój kawałek kodu to :

string pattern = @"\b\w*te+\w*\b";
string input = response;
Match m = Regex.Match(input, pattern, RegexOptions.IgnoreCase);
if (m.Success) Console.WriteLine("Found '{0}' at position {1}.", m.Value, m.Index);

Niestety uzyskuje tylko:temperatura_sypialnia. Czy ktoś może mi pomóc?

0

"temperatura_sypialnia":.*?(\d+\.*\d+)

Może tak?

1

Dlaczego nie zrobić najpierw split po ',' a potem po ':' ?
Na końcu dostaniesz słownik klucz/wartość.

PS: Osobiście nie przepadam za regex ;)

0

mlody_d może jest inny sposób niż regex

0

Właśnie go zasugerowałem, zobacz sobie jak działa metoda "Split" dla stringa

0

@slavoHeys: Klasycznie. U mnie działa.

string pattern = "\"temperatura_sypialnia\":.*?(\\d+\\.*\\d+)";
string input = "\"data_sypialnia\": \"05.10.2021\", \"godzina_sypialnia\": \"08:53\", \"temperatura_sypialnia\": 23.6, \"cisnienie_sypialnia\": 990.4, \"wilgotnosc_sypialnia\": 60.2.";
Match m = Regex.Match(input, pattern, RegexOptions.IgnoreCase);
if (m.Success) Console.WriteLine("Found '{0}' at position {1}.", m.Value, m.Index);

Found '"temperatura_sypialnia": 23.6' at position 62.

e: aby uzyskać samą wartość: Console.WriteLine(m.Groups[1].Value);

0

Kokoniłaj w zmiennej input mam coś takiego:
Zrzut ekranu 2021-10-05 141606.png

u mnie: "temperatura_sypialnia":.?(\d+.\d+) wywala błędy

1

Widzę, że masz JSON string to lepiej wykorzystać narzędzia do deserializacji. Możesz zbudować własny typ i użyć np. Json.NET.
Visual studio wygeneruje Ci klasę automatycznie. Edit > Paste Special> Paste JSON as Classes

U mnie nie ma żadnych błędów jeżeli chodzi o kod. Program konsolowy, netcore 3.1

1 użytkowników online, w tym zalogowanych: 0, gości: 1