Toon posts:

[C#] RegEx werkt bij .... Maar niet helemaal.

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil graag een regex hebben die alle worden uit een string haald die met een @ beginnen (SQL variabelen).

De volgende code vindt de meeste wel, maar ook diegene die beginnen met 2 (@@).

C#:
1
2
3
4
5
6
Regex regex = new Regex(
    @"@{1}[a-zA-Z]{1,}",
    RegexOptions.IgnoreCase
    | RegexOptions.IgnorePatternWhitespace
    | RegexOptions.Compiled
    );


Dus bij de volgende test text:
code:
1
2
3
@First test @Second Test.
@Third test @Fourth.
@@Non test @@NonAgain.


Vind hij ook de @@Non en @@NonAgain, maar als @Non en @NonAgain.
Dit laatste wil ik dus voorkomen.

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

look-behind gebruiken?

Intentionally left blank


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Je moet even een look-behind assertion op een non-@ teken doen:
code:
1
(?<!@)@[a-z]{1,}

Deze kijkt of er voor de @ niet nog een @ staat. Verder kun je [a-zA-Z] als [a-z] schrijven als je de IgnoreCase flag aanzet en heeft de {1} geen functie; "c{1}" betekent hetzelfde als "c".

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Topicstarter
Beide bedankt voor de snelle reactie. :)
Ik gebruik Expresso om Regex expressies te maken maar de look-behind heb ik nog nergens kunnen vinden. Ook niet op menig forum en tutorial die ik er op na heb gezocht.

En over de {1,} dit betekend toch 1 of meer. Dat is toch niet gelijk aan {1} ??

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Je hebt geen look-behind assertion nodig, denk ik:
(^@)|([^@]@) matcht een enkele @ aan het begin van een regel of een @ zonder voorafgaande @
Weliswaar match je dan ook het karakter voor de @, maar is dat een probleem?

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Jinta:
Ik gebruik Expresso om Regex expressies te maken maar de look-behind heb ik nog nergens kunnen vinden. Ook niet op menig forum en tutorial die ik er op na heb gezocht.
Kan best zijn dat 'ie dat niet ondersteunt, d'r zijn wel meer re-engines die dat niet ondersteunen. In dat geval kun je het beste de character ervoor meepakken in je regex (wat een look-behind dus voorkomt). Zie MSalters.
En over de {1,} dit betekend toch 1 of meer. Dat is toch niet gelijk aan {1} ??
Klopt, dat bestrijd ik ook niet :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

als lookbehind niet ondersteund wordt dan zou je nog kunnen opteren voor een non-capturing subpattern (vermits dat wel ondersteund word), en anders zit er inderdaad niets anders op dan het karakter ervoor mee te nemen in je match...

Intentionally left blank


Verwijderd

Topicstarter
drm schreef op woensdag 10 augustus 2005 @ 17:40:
[...]
Kan best zijn dat 'ie dat niet ondersteunt, d'r zijn wel meer re-engines die dat niet ondersteunen. In dat geval kun je het beste de character ervoor meepakken in je regex (wat een look-behind dus voorkomt). Zie MSalters.

[...]
Klopt, dat bestrijd ik ook niet :)
Ik zie dat ik het mis heb, ik dacht dat je de [a-zA-Z]{1,} bedoelde, maar ik heb {1} achter de @ staan :)

Overgens ... Expresso ondersteund de look behind dus wel, alleen ik kende het hele fenomeen niet. Regex is best moeilijk als je er niet veel mee doet.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

crisp:
als lookbehind niet ondersteund wordt dan zou je nog kunnen opteren voor een non-capturing subpattern (vermits dat wel ondersteund word)
Mwah, dat heeft niet zo heel veel zin, hij wordt dan in de gehele match toch alsnog meegenomen. Hij wordt dan alleen niet apart gegrouped.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1