Jak napisać wyrażenie regularne by wyciągnąć to co jest pomiędzy friendlyname a gateway?
4AF7-8039-BE943AADA060}
FriendlyName: Połączenie sieciowe Bluetooth
GatewayAddress: 0.0.0.0
Description:
Jak napisać wyrażenie regularne by wyciągnąć to co jest pomiędzy friendlyname a gateway?
4AF7-8039-BE943AADA060}
FriendlyName: Połączenie sieciowe Bluetooth
GatewayAddress: 0.0.0.0
Description:
Z opcją multiline:
FriendlyName:(.*?)GatewayAddress:
@maszynaz - w komentarzu się niespecjalnie mieści odpowiedź na Twój, więc jako post:
. - dopasowuje dowolny znak
.* dopasowuje dowolną ilość znaków, przy czym jest greedy (to ważne)
.*? tak samo jak powyżej, ale non-greedy.
Czyli .* dopasowuje maksymalną ilość znaków jaką się da żeby regex przeszedł, a .*? - minimalną.
W tym przypadku to bęszie szybsze. Dodatkowo, porównaj co się stanie dla takiego wejścia:
4AF7-8039-BE943AADA060}
FriendlyName: Połączenie sieciowe Bluetooth
GatewayAddress: 0.0.0.0
Description:
4AF7-8039-BE943AADA060}
FriendlyName: Połączenie sieciowe Bluetooth
GatewayAddress: 0.0.0.0
Description:
W przypadku .* - dopasuje jeden wielki ciąg, a w przypadku .*? będą dwa dopasowania (czyli tak jak powinno)
Btw. skoro już piszę - dla większego bezpieczeństwa możesz jeszcze próbować z takim regexem (\n przed gatewayAddress - nie wywali się jeśli w FriendlyName będzie string GatewayAddress).
FriendlyName:(.*?)\nGatewayAddress:
edit: o, monk szybszy o 4 sekundy.
Jeśli to po FriendlyName nie jest na więcej niż jedną linijkę, to wystarczy:
FriendlyName: (.*)
(bez singleline)
Zastanawiam się czy @maszynaz nie próbuje parsować wyniku wywołania ToString
zamiast użyć właściwości.
159 public override string ToString()
160 {
161 StringBuilder sb = new StringBuilder();
162 sb.AppendFormat("Name: {0}\n", Name);
163 if(FriendlyName != null)
164 {
165 sb.AppendFormat("FriendlyName: {0}\n", FriendlyName);
166 }
167
168 if (GatewayAddress != null)
169 {
170 sb.AppendFormat("GatewayAddress: {0}\n", GatewayAddress);
171 }
172
173 sb.AppendFormat("Description: {0}\n", Description);
174 foreach(PcapAddress addr in Addresses)
175 {
176 sb.AppendFormat("Addresses:\n{0}\n", addr);
177 }
178 sb.AppendFormat("Flags: {0}\n", Flags);
179 return sb.ToString();
180 }