Regular expressions w c#

0

Witam!
Chcę z takiego tekstu:

" tabindex="1" >543Fdl3-</a>

" tabindex="1" rel="nofollow" >..//345349sd</a>

" tabindex="1" >qwoFLdsf0</a>

" tabindex="1" >Vodsf954</a>

" tabindex="1" >ZZX546.,,cc</a>

wyodrębnić to, co jest pogrubione. Do tego chciałbym użyć regular Expressions. Ten kod:

MatchCollection m2 = Regex.Matches(sourceCode, "tabindex=\"1\" (rel=\"nofollow \"| )>(.+?)<", RegexOptions.Singleline);

Nie wypluwa mi żadnych wyników.

Ten kod:

MatchCollection m2 = Regex.Matches(sourceCode, "tabindex=\"1\" >(.+?)<", RegexOptions.Singleline);

Wypluwa mi wszystkie wyniki oprócz tych z "nofollow".

Macie jakieś pomysły?

3

wedlug tego co tutaj podales wystarczy tylko takie cos z flaga global (/g)

>(.+?)<\/a>

mozesz sobie sprawdzic tutaj twoj wynik regexowy
https://regex101.com/

0

Problem jest w tym, że wyodrębniam to z dosyć dużego fragmentu tekstu; źródła strony ---> view-source//www.reddit.com/r/gifs/?count=125&after=t3_3w7ju0
Więc użycie samego tego:

 >(.+?)<\/a>

nie ma sensu, bo pierwszy "<" znajduje sie duzo wczesniej.

Muszę jakoś zaznaczyć, by szukało od fragmentu "tabindex" oraz "nofollow", jeśli istnieje.
MatchCollection m2 = Regex.Matches(sourceCode, "tabindex="1"(rel=" nofollow "| )>(.+?)<", RegexOptions.Singleline);

Czyli, żeby zaczynało szukać od

"tabindex="1" rel="nofollow ">...cokolwiek....<

Albo (ponieważ | działa jako lub)

"tabindex="1" >...cokolwiek....<

1

to wtedy takie cos

" tabindex="1"\s.*>(.+)<\/a>

a jak chcesz dla kazdego tabindex to wtedy usun ta tyle ile chcesz by bylo po lewej stronie i powinno dzialac :)

0

Jak ja nie lubie tego regular expressions.. Dlaczego nie moge uzyć znaku ", tylko musze albo pisac "" albo ". Na dodatek jeszcze gorsze problemy sa kiedy mam " i \ obok siebie. No katorga po prostu.

@up
I w regex101.com i w moim programie Twoj kod nie działa :/
Dobra.. jednak działa. Jednak nie w moim programie..

A dokładniej w takiej postaci: MatchCollection m2 = Regex.Matches(sourceCode, "tabindex="1"\s.*>(.+)<\a>", RegexOptions.Singleline);

2

Cytując klasyka:

Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems.

Jezeli te wartości są stałe to może po prostu podać dwie alternatywy?
(?<=tabindex=\"1\" | tabindex=\"1\" rel="nofollow" )>(.+?)<\/a>
https://regex101.com/r/aV1rB4/2

0

@racuh
Jak wklejam dokładnie to co napisałeś, to dostaje pełno błędów: http://puu.sh/lQxKa/019e94fe54.png

Dopiero edycja z:

"(?<=tabindex=\"1\" | tabindex=\"1\" rel="nofollow" )>(.+?)<\/a>", RegexOptions.Singleline); 

na

"(?<=tabindex=\"1\" | tabindex=\"1\" rel=\"nofollow\" )>(.+?)<\\a>", RegexOptions.Singleline); 

Usuwa błędy, ale wtedy i tak nic nie scrapuje..

1

tam przeciez masz "" i pokazue ze nofollow jako zmienna! dlatego Ci nie dziala. Daj tak

 MatchCollection m2 = Regex.Matches(sourceCode, """ (?<=tabindex=\"1\" | tabindex=\"1\" rel="nofollow" )>(.+?)<\/a> """, RegexOptions.Singleline);

albo tak

 MatchCollection m2 = Regex.Matches(sourceCode, " (?<=tabindex=\"1\" | tabindex=\"1\" rel=\"nofollow\" )>(.+?)<\/a> ", RegexOptions.Singleline);
0

@fasadin
Ten drugi kod który napisałeś w ostatnim poście, to identyczny napisałem wyżej z 1 różnicą.
Jak zrobie:

 <\/a>

top dostaje błąd "Unrecognized escape sequence"

dopiero zmiana na:

 </a>

lub <//a>

 (sprawdzałem oba przypadki) powoduje, ze program się kompiluje (czyli wygląda to tak:
```cpp
 MatchCollection m2 = Regex.Matches(sourceCode, " (?<=tabindex=\"1\" | tabindex=\"1\" rel=\"nofollow\" )>(.+?)</a> ", RegexOptions.Singleline);

I mimo tego program nie wypluwa mi zadnego tytulu..

1

Takie coś?

static void Main(string[] args)
{
   var web = new WebClient();
   var str = web.DownloadString("https://www.reddit.com/r/gifs/?count=125&after=t3_3w7ju0");
   var matches = Regex.Matches(str,
                           @"(?<=tabindex=\""1\"" \>| tabindex=\""1\"" rel=""nofollow"" \>)(.+?)(?=<\/a>)",
                           RegexOptions.Singleline);
   foreach (Match match in matches)
   {
      Console.WriteLine(match.Value);
   }
}
0

@DibbyDum
Nie do końca jeszcze wiem jak, ale działa. Dzięki chłopie (i wszystkim innym, którzy pomogli). Miło, że tak chętnie się udzieliliście. Łapcie plusy :)

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