1

わかりました、私はかなりトリッキーな正規表現の問題を抱えています。

次の文字列の+記号を一致させて空白に置き換える必要があるため、左側の文字列は右側の文字列になる必要があります。

1: word+word   =  word word
2: word+++word =  word + word
3: word.+word  =  word. word
4: word,+word  =  word, word

私はこれでほとんどの日を釘付けにすることができました。これはプラス記号の前後の文字列をチェックします。

(?<=[\w\.,])\+(?=[\w])

ただし、一度に(2)に隣接するプラス記号のセットを1つだけ釘付けにすることができます。

(?<=[\w\.,\+])\+(?=[\w]) // gets the left plus sign
2: word+++word =  word++ word

(?<=[\w\.,])\+(?=[\w\+]) // gets the right plus sign
2: word+++word =  word ++word

私の現在の正規表現の混乱状態では、パターンをより大きな条件でラップする必要があるのか​​、それともルックアラウンドでどちらかまたはパターンを実装する必要があるのか​​疑問に思っています。そこにある正規表現のメイヴンは、これに旋風を与えることを気にしていますか?

4

1 に答える 1

3

これはあなたの例でうまくいくはずです:

(?<!\+)\+|\+(?!\+)

それをスペースに置き換えます。

例:

perl -E "$_='a+b++a+++b++++c+++++d'; s/(?<!\+)\+|\+(?!\+)/ /g; say"

出力:

a b  a + b ++ c +++ d
于 2011-07-06T16:46:22.127 に答える