Ich habe eine Zeichenfolge, die ich mit Regex in C# abgleichen möchte.C# Regex stimmt nicht mit Regex101 überein
Die Zeichenfolge ist Hello1004,"7"
.
Ich erstelle die Regex mit
var reg = new Regex(@"hello\s*\[?\s*,?\s*(?<group1>\d+)\s*,\s*""(?<group2>[^""]+)""", RegexOptions.IgnoreCase);
(Es können mehrere Räume, ein [
oder ein ,
vor 1004
.)
1004
nicht immer 1004
sein kann, aber es wird immer eine 4-stellige Nummer.
Was ich versuche zu bekommen:
- Gruppe1:
1004
- group2:
7
Sie können here eine Regex101 Demo sehen.
Es funktioniert perfekt in der Demo, aber wenn
foreach (var match in reg.Matches(text))
{
var group1 = match.Groups["group1"]?.Value;
var group2 = match.Groups["group2"]?.Value;
}
group1
leer zu tun ist und group2
hat 1004
drin. Wenn ich ein Leerzeichen zwischen Hello
und 1004
setze, funktioniert es gut in C#.
Kann jemand erklären, warum ich diese Diskrepanz zwischen den beiden bekomme?
Ich bin mit Visual Studio 2017, .NET Framework 4.
See http://ideone.com/FA8WNg, so scheint es zu arbeiten. –
Das gleiche hier. Hat einen Test in LinqPad: var s = @ "Hallo1004," "7" ""; \t \t var reg = neue Regex (@ "Hallo \ s * \ [? \ S *,? \ S * (? \ d +) \ s *, \ s *" "(? [^" "] +) "" ", RegexOptions.IgnoreCase); \t \t reg.Match (s).Dump(); –
Vidar
@ WiktorStribiżew Hmmm ... Das scheint zu funktionieren. Allerdings funktioniert es definitiv nicht in meiner realen Anwendung. Ich werde die Frage mit meiner Version von .NET aktualisieren, falls das zutrifft. –