26. juli 2004 - 21:41
Der er
24 kommentarer og 1 løsning
RegExp Problemmer
jeg har en streng: " sdfgwetg wrgwrgtwert wergtwet wetwetwt wtgwerytwert wregtwert " Her er min RegExp: "([a-z]+)\n([a-z]+)" Jeg burde få 3 resultater men den forstår åbenbart ikke \n i mellem de to a-z? Hvad gør jeg galt?
Annonceindlæg fra Computerworld it-jobbank
Nåh ja forresten, jeg henter den streng fra en fil: StreamReader x = new StreamReader("a.txt", System.Text.Encoding.Default); string file = x.ReadToEnd(); Hvis det gør nogen forskel :-)
Prøv: "([a-z]+)\\n([a-z]+)"
Har jeg prøvet, den ville heller ikke :-/
Mystisk. Dit original udtryk virker hos mig. using System; using System.Text.RegularExpressions; class MainClass { public static void Main(string[] args) { test("a\nb"); test("a\nb\nc\nd"); test("a"); } private static void test(string s) { Console.WriteLine(s.Replace('\n','*') + " has:"); MatchCollection res = Regex.Matches(s,"([a-z]+)\n([a-z]+)"); for(int i = 0; i < res.Count; i++) { Console.Write(" " + res[i].Groups[0].ToString().Replace('\n','*')); } Console.WriteLine(); } }
Jeg bruger kun .Replace('\n','*') for at gøre print lidt mere letlæseæligt.
Ja hvis jeg laver en streng så vil den godt, men hvis jeg henter det fra en fil vil den ikke.
Har du prøvet med \r\n hvis nu filen indeholder det ?
Ja, det virker heller ikke :/
hver linie slutter med "carriage return" og "line feed". Dette kan skives som \r\n eller \x0d\x0a, dvs: "([a-z]+)\\x0d\\x0a([a-z]+)" eller. "([a-z]+)\\r\\n([a-z]+)" skulle løse problemet
26. juli 2004 - 22:52
#10
hmm havde ikke set de tidligere kommentarer... sry bare en gentagelse... (men måske var det værd at tjekke \\r\\n?)
26. juli 2004 - 22:56
#11
"([a-z]+)\r\n([a-z]+)" virker hos mig ????
26. juli 2004 - 22:56
#12
using System; using System.IO; using System.Text.RegularExpressions; class MainClass { public static void Main(string[] args) { test("a\nb"); test("a\nb\nc\nd"); test("a"); test((new StreamReader(File.OpenRead("C:\\z.dat")).ReadToEnd())); } private static void test(string s) { Console.WriteLine("---> " + s); Console.WriteLine(s.Replace('\n','*') + " has:"); MatchCollection res = Regex.Matches(s,"([a-z]+)\\r\\n([a-z]+)"); for(int i = 0; i < res.Count; i++) { Console.Write(" " + res[i].Groups[0].ToString().Replace('\n','*')); } Console.WriteLine(); } }
26. juli 2004 - 22:56
#13
aaa bbb ccc ddd has: 0 : aaa bbb 1 : ccc ddd
26. juli 2004 - 22:59
#14
Du har vel ikke nogen mellemrum i filen ?
26. juli 2004 - 23:07
#15
Har du Regex.multiLine = true ?-)
26. juli 2004 - 23:15
#16
System.Text.RegularExpressions.Regex har ikke nogen multiLine Man kan sætte MultiLine i Options men det vil næppe hjælpe. Fra docs: Multiline Supported by the .NET Compact Framework. Multiline mode. Changes the meaning of ^ and $ so they match at the beginning and end, respectively, of any line, and not just the beginning and end of the entire string.
26. juli 2004 - 23:16
#17
Det var iøvrigt forkert kode jeg fik pastet ind. Den kode som svarer til outputtet er: using System; using System.IO; using System.Text.RegularExpressions; class MainClass { public static void Main(string[] args) { test((new StreamReader(File.OpenRead("C:\\z.dat")).ReadToEnd())); } private static void test(string s) { Console.WriteLine(s + "\n has:"); MatchCollection res = Regex.Matches(s,"([a-z]+)\r\n([a-z]+)"); for(int i = 0; i < res.Count; i++) { Console.WriteLine(i + " : " + res[i].Groups[0].ToString()); } Console.WriteLine(); } } (det andet var lidt eksperimenteren)
26. juli 2004 - 23:25
#18
Jeg er snot forvirret! Her er min tekst fil: aaaaa ddddd eeeee ggggg hhhhh Resultat: aaaaa ddddd eeeee ggggg *hhhhh has: *hhhhh ggggg
26. juli 2004 - 23:28
#19
Nu får jeg: 0 : ddddd eeeee 1 : eeeee hhhhh Med samme tekst fil.
26. juli 2004 - 23:36
#20
OK, Jeg har denne her: namespace ConsoleApp { class Class1 { [STAThread] static void Main(string[] args) { StreamReader x = new StreamReader("C:\\a.txt", System.Text.Encoding.Default); string s = x.ReadToEnd(); int count = 0; MatchCollection res = Regex.Matches(s, "\r\n"); for ( int i = 0; i < res.Count; i++ ) { s = s.Replace(res[i].Groups[0].ToString(), "*\n"); count++; } Console.WriteLine("Der var "+count+" Erstatninger.\n\n"); Console.WriteLine(s); Console.ReadLine(); } } } Den virker 100% med kun "\r\n" men når jeg smider ([a-z]+)\r\n([a-z]+) ind i stedet, så går der ged i det!
27. juli 2004 - 12:17
#21
Jeg har denne her streng: oiwejrgwag wgpwojgwgsfg wgoiwjgp wgpoiwjg gpw9ijfggpgfg dbondfkjbn dfboksdfgio ertojrgsåfdf Menningen er at den skal godtage det som en erstatning hvis der er 1 linje eller 2 hovr linjerne indeholder noget udover et linjeskift, Dvs. med overstående streng får jeg 6 erstatninger: Første: oiwejrgwag Anden: wgpwojgwgsfg wgoiwjgp Tredje: wgpoiwjg Fjerde: gpw9ijfggpgfg dbondfkjbn Femte: dfboksdfgio Sjette: ertojrgsåfdf
27. juli 2004 - 12:23
#22
Skal dit udtryk så ikke være: ([a-z]+\r\n\r\n)|([a-z]+\r\n[a-z]+\r\n\r\n) ? en linie efterfulgt af en tom linie eller to linier efterfulgt af en tom linie
27. juli 2004 - 13:12
#23
Ja! Det var det jeg søgte, smid et svar.
27. juli 2004 - 13:19
#24
ok
27. juli 2004 - 13:37
#25
Du får lidt flere point :P
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.