Her er en artikel<br><br>Og i artiklen er der indbygget<br>linjeskift, som jeg vil have fjernet,<br>så det er browseren der bestemmer<br>hvornår der skal laves linjeskift.<br><br>Med undtagelse af når der står 2 linjeskift<br><br>som er inddeling af afsnit.
Det skulle gerne blive til
Her er en artikel<br><br>Og i artiklen er der indbygget linjeskift, som jeg vil have fjernet, så det er browseren der bestemmer hvornår der skal laves linjeskift.<br><br>Med undtagelse af når der står 2 linjeskift<br><br>som er inddeling af afsnit.
Ovenstående kan jeg vel kun bruge til at matche 2 <br>'er efter hinanden - og det er jo ikke det, jeg er ude efter... faktisk er jeg ude efter at matche <br> som IKKE må være efterfulgt af et nyt <br>.
Dvs. den skal matche de "<br>"'er der står alene, og ikke de dobbelte - som skal bibeholdes som dobbelte.
Jeg vil tillade mig at foreslå noget helt andet. Da dobbelt <br> skal bruges til at angive nyt afsnit, hvad så med at skifte det ud med den kode, som netop betyder at her kommer et nyt afsnit? Så er der ingen dobbelte <br> til at drille, når du bagefter fjerner de enkelte <br>.
Koden for nyt afsnit er </p><p>
Hvis det skal være gyldigt xhtml, så skal du sørge for at have en <p> i starten også.
using System; using System.Text.RegularExpressions;
namespace r719161 { class Program { static void Main(string[] args) { string text = @"Her er en artikel<br><br/>Og i artiklen er der indbygget<br />linjeskift, som jeg vil have fjernet,<br>så det er browseren der bestemmer<br>hvornår der skal laves linjeskift.<br><br>Med undtagelse af når der står 2 linjeskift<br><br>som er inddeling af afsnit."; Console.WriteLine(text);
Regex re = new Regex(@"(?<!<br(?:\s*/)?>)<br(?:\s*/)?>(?!<br(?:\s*/)?>)", RegexOptions.IgnoreCase);
Console.WriteLine();
text = re.Replace(text, " "); Console.WriteLine(text); } } }
nielle - smider du et svar. Det var præcis, hvad jeg var ude efter :)
sandbox - godt forslag, som jeg også selv overvejede. Det er artikler, der kommer "udefra", så vi har ikke altid 100% styr på, hvordan de bliver formatteret. Nogen i rå tekst og nogen i HTML - for at have nogenlunde styr over outputtet i alle formater vil vi ikke blande for mange tags ind i det. Selvom det HTML-mæssigt måske ville være den bedste løsning.
Nielle: Jeg har lige et spørgsmål. Det var lidt det samme jeg havde forsøgt mig med (altså en negativ lookbehind og lookahead), men da jeg prøvede det i PHP gav det mig fejlen "lookbehind assertion is not fixed length", så jeg troede ikke det var muligt. Hvordan kan det være at det virker i C# og ikke PHP?
> Hvordan kan det være at det virker i C# og ikke PHP?
Der er mere regelen end undtagelsen at regex-implementationen variere fra programmerinsgssprog til programmerinsgssprog. Og netop lookbehind er i øvrigt et af de steder hvor der er meget forskel (f.eks. understøttes det slet ikke i VB Script/ASP).
Jeg er ikke ekspert i detaljerne omkring PHP's preg_xxxx() implentation, men det lader altså til at *-qualifieren ikke er tilladt i en lookbehind.
Uden dog at have afprøvet den, vil jeg gætte på at denne virker i PHP:
(?<!(?:<br>|<br/>|<br />))
Den dækker selvfølgelig ikke så bredt som versionen med \s*, men mon ikke at den alligevel rammer de relevante tilfælde?
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.