私は式の文字列をトークンに分割しようとしています。 Iveは良い出発点を見つけました」([A-Za-z] + | [0-9。] + | [& => < \ |!] + | \ S) ' しかし、これは負の数に問題があります。正規表現を使ったトークン化の数式
turns: '5--4=sin(2+3)'
into: ['5','-','-','4','=','sin','(','2','+','3',')']
want: ['5','-','-4','=','sin','(','2','+','3',')']
とも
turns: -3+3
into: ['-','3','+','3']
want: ['-3','+','3']
数がある場合、私の正規表現はの左側にチェックし、何かを使用することができますように見えます「 - 」場合次の数字でそれを保持しないでください(「-3」は左に何もしません)。それは正規表現を使用して行うことができますか?または、これを.NETで分割するための優れたツールがありますか?
ああ、正規表現は完全にレキシングに適しています - それはChomskyタイプ3の問題です。 OPは彼が得た結果が実際に彼が必要とするものであることを認識しません。 ' - ' '3'では、' - 'は実際には単項否定演算子です。 –
@LucasTrzesniewskiもちろん、正規表現は完全にレキシングに適していますが、OPは彼のレキシングを文脈依存にしたいと考えています。彼は、彼が望むものでも正規表現が提供できるものでもない、「-3-3」の2つのマイナスが異なって扱われることを望んでいる。 – dasblinkenlight
はい、あなたの答えをもう一度読み終えたら、あなたが意味するものが得られます。ところで、レクサージェネレータは "問題"を魔法のように修正するだけではなく、ほとんどの場合正規表現をフードの下で使用します;) –