Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

Regex: Match van 2 strings enkel met spaties ertussen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

ik heb een reeks txt's die bestaan uit de volgende (single) line:
-css turn

De spaties ertussen zijn variabel.
ik wil nu via .net regex enkel een match laten goedkeuren indien het woord turn volgt op minstens 1 spatie (dus meerdere mogen) van de string -css.

Dus enkel spaties tussen beide woorden zijn toegelaten, al de rest niet.
Dit heb ik tot dusver:

$regex = [regex] "-css[\s]+[^no]turn"

dit werkt echter niet als er staat -css no_turn bvb.

In een latere fase had ik graag ook een meer volledige negated character class zoals [^0-9A-Za-z._\s]turn$ etc. toegevoegd, maar zou graag nu al weten wat er fout loopt.

ik heb al uren online gezocht zonder resultaat, kan iemand mij helpen?

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Wellicht helpt het als je wat voorbeelden geeft van wat je wel en niet probeert te matchen. -css +turn matched sowieso al niet op -css noturn bijvoorbeeld. Als no juist optioneel is, dan geef je dat niet aan met een karakter-klasse, maar met (?:no)?. Denk ook aan dubbele escaping als dat nodig is in de taal die je gebruikt.

Zie verder de documentatie: http://perldoc.perl.org/perlre.html of liever de documentatie van het dialect dat je gebruikt. http://www.php.net/manual...e.pcre.pattern.syntax.php ofzo. In plaats van uren zoeken kun je beter uren lezen ;)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • mrc4nl
  • Registratie: September 2010
  • Laatst online: 05:14

mrc4nl

Procrastinatie expert

er zijn zelfs complete tooltjes voor die je goed inzicht geven aan wat je regex doet en doe je een regex opstelt

ora et labora


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

psuedo: s = string.split(' ') s[0] == "-css" && s[1].startsWith("turn")

Verwijderd

Topicstarter
Niets matchen tussen -css en turn behalve spaties, dat is het eigenlijk zowat.

het woord "no" mag er dus ook zeker niet tussen staan, was in eerste instantie de bedoeling enkel dit te excluden want het is nu net dat woord dat meestal in de txt-files staat.

is .NET RegEx btw, gelanceerd via Powershell

bedankt voor de tips alvast!

[ Voor 11% gewijzigd door Verwijderd op 18-10-2013 09:43 ]


  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 23-10 08:50
code:
1
-css[ \t]+turn


Matcht:
- "-css"
- Ieder aantal (niet. 0) spaties en tabs (geen whitespace zoals newlines)
- "turn"

Uitleg:
"-css" as is
"[ \t]+" matcht een spatie of een tab ([ \t]), minimaal 1 keer (+)
"turn" as is

[ Voor 99% gewijzigd door Gamebuster op 18-10-2013 09:49 ]

Let op: Mijn post bevat meningen, aannames of onwaarheden


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Gamebuster schreef op vrijdag 18 oktober 2013 @ 09:44:
code:
1
/-css[ \t]*(?:no_)?turn/i


Matcht:
- "-css"
- Ieder aantal spaties en tabs (geen whitespace zoals newlines)
- Optioneel "no_"
- "turn"
Verwijderd schreef op vrijdag 18 oktober 2013 @ 09:41:
het woord "no" mag er dus ook zeker niet tussen staan
Volgens mij is 't gewoon -css\s+turn
Afbeeldingslocatie: http://tweakers.net/ext/f/WwXAYpDqSNFraKccTUImRhZZ/full.png

En als het de hele regel alleen maar mag bestaan uit die tekst: ^-css\s+turn$
Afbeeldingslocatie: http://tweakers.net/ext/f/MKNMuh4Q653OOQVUSElWZ2MH/full.png

[ Voor 27% gewijzigd door RobIII op 18-10-2013 09:58 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 23-10 08:50
Ja, ik deed derp :P

Al aangepast

Let op: Mijn post bevat meningen, aannames of onwaarheden


Verwijderd

Topicstarter
helaas, die had ik gisteren ook al geprobeerd, zonet nog eens uitgevoerd.
Die regex geeft een match wanneer volgende inhoud in de file staat:

-css no_turn

en dat wil ik net niet. ook -css no-turn geeft een match.

na de turn staat een spatie zie ik en dan enkele tabs. alles staat op lijn 1 in de TXT-file maar de "c" van css is wel character nr. 88 of zo (net voor -css staan er dan weer tabs en spaties).

Kan het toch te maken hebben met multi-line options? Want als ik de file open in notepad, staat alles wel op 1 lijn, maar in notepad++ staat de -css lijn pas op row 45 of zo...

nog wat meer info: ik gebruik de IsMatch Method waarbij $regex de expressie is (tussen double of single quotes maakt geen verschil) en $txtfile de content van mijn file

$regex = [regex] '-css\s+turn'
If ($regex.IsMatch($txtfile)){Write-Host "De expressie werd gevonden"}

[ Voor 35% gewijzigd door Verwijderd op 18-10-2013 10:58 ]


Verwijderd

Topicstarter
ok heb het gevonden, de regex was perfect waarvoor dank. Het was de opzet van mijn powershell script die een rare kronkel had.

Dankuwel!
Pagina: 1