Wat is er mis met deze regex? (gebruik makend van '.')

Ik schreef de volgende code in F #:

let regexSymbol = new Regex(@"\b\}|\.\b")
if (Regex.IsMatch(".", regexSymbol.ToString())) then
    printfn "symbol0"

Maar er wordt niets afgedrukt ..

Ik zou willen dat de regex alleen tekenreeksen vertegenwoordigt die precies "}" of "." , zonder volgende of voorafgaande tekens op dezelfde regel. Weet iemand hoe ik het moet veranderen?

Bedankt.. :)

2
Kun je specifieker zijn over de behandeling van de woordgrenzen? Welke periodes en juiste beugels wil je matchen? En welke precies wilt u niet matchen?
toegevoegd de auteur Ray Toal, de bron
Oh, dan alleen op een regel? Zo ja, zie @ raina770w's antwoord. Als je met geen enkele teken bedoelt dat het ok is om witruimte te hebben, maar geen afdrukbare tekens rond de accolade of periode, dan heb je @ "(^ | \ s) [}.] ( $ | \ s) "
toegevoegd de auteur Ray Toal, de bron
Zijn dat een paar geketende punten | ? Overweeg een set te gebruiken om het leesbaarder te maken ...
toegevoegd de auteur K-ballo, de bron
\ s + , misschien. ) Of gewoon ^ \ s * [whatever] \ s * $ , zou eigenlijk de voorkeur geven aan deze optie.
toegevoegd de auteur raina77ow, de bron
Ik betwijfel of dit iets specifieks is voor F #. U wilt waarschijnlijk naar goede regex-tools kijken om ervoor te zorgen dat u de juiste uitdrukking krijgt.
toegevoegd de auteur Onorio Catenacci, de bron
@ K-ballo Ik heb het nu beter leesbaar gemaakt. Iedereen?
toegevoegd de auteur cookya, de bron
@RayToal Ik heb de vraag bewerkt :)
toegevoegd de auteur cookya, de bron

2 antwoord

Als u op die manier strings moet matchen, gebruikt u ankers aan het begin van de string en aan het einde van de string:

open System.Text.RegularExpressions
let regexSymbol = new Regex("^[}.]$")//in this case verbatim is not required
if (regexSymbol.IsMatch(".")) then printfn "Matched! :)" else printfn "Not matched... :("
if (regexSymbol.IsMatch("}.")) then printfn "Matched! :)" else printfn "Not matched... :("

Hierdoor wordt "Matched" op de eerste regel afgedrukt en "Not Matched" op de tweede regel.

Maar is het niet beter om alleen maar te controleren of deze reeks gelijk is aan "}" en '.'? Sorry, net begonnen met het verkennen van F #.

2
toegevoegd
Wel, dat is echt raar: ik heb het antwoord bijgewerkt met de volledige code, die gewoon werkt - '}.' is niet gematcht. Zou je je code dan kunnen laten zien? Er zou een verschil moeten zijn, denk ik.
toegevoegd de auteur raina77ow, de bron
Bedankt, ik zal het proberen :) Ik heb te veel optionele symbolen om elke elke reeks te proberen.
toegevoegd de auteur cookya, de bron
Het werkt niet - het herkent "}."
toegevoegd de auteur cookya, de bron

Het probleem is dat wat een "." wordt niet als een woordgrens beschouwd. Dus \ b "komt overeen met" A ", maar niet met". "'.

1
toegevoegd
+1 voor een accuraat antwoord op de oorspronkelijke vraag.
toegevoegd de auteur Ray Toal, de bron
Bedankt! Hoe kan ik dit veranderen om "." maar niet ".a." bijvoorbeeld?
toegevoegd de auteur cookya, de bron