2011-07-29 10 views
2

私は、スペースを文字列内のダッシュで置き換える方法を見つけるのに苦労しましたが、文字列の特定の部分にあるスペースのみを置き換えました。スペースをサブストリング内のダッシュで置き換える正規表現。

出典:正規表現

ABC *This is a sub string* DEF 

私の試み:

/\s/g 

私は、スペースに合わせて交換する正規表現を使用している場合は、私は次のような結果を得ます

ABC-*This-is-a-sub-string*-DEF 

しかし、私は2つのアスタリスクで囲まれたテキスト内のスペースを置き換えたいだけです。ここで

は私が達成しようとしているものです:

ABC *This-is-a-sub-string* DEF 

ない正規表現の確認なぜI型が見つけ、正規表現でTextMateで置き換えるオプションを有効に使っているとして私が使用しています。

この正規表現の検索と置き換えを実行する文字列は異なるテキストを持つことに注意してください。しかし、それはアスタリスク内の一致するスペースだけです。

ご協力いただければ幸いです。

+0

あなたはどの言語/プログラムを使用していますか? – kevlar1818

+0

TextMateを検索して置換します。 – Camsoft

答えて

2

アスタリスクで囲まれたスペースを識別するには、アスタリスクがペアでしか表示されない場合、検索するスペースの後に常に奇数個のアスタリスクが続きます。

正規表現

\ (?=[^*]*\*([^*]*\*[^*]*\*)*[^*]*$) 

を交換する必要があり、一度にマッチします。 Textmateはこれを動作させるための先読みアサーションをサポートする必要があります。

+0

他の答えが間違っていたことを指摘してくれてありがとう。私はあなたのことをテストしたし、それは動作します。 – Camsoft

+0

本当に賢い:)ドキュメント内に奇数のアスタリスクがあると正しく動作しません。しかし、とにかくそれは意味をなさない:+1 – petho

0

お試しください:\s(\*[^*]*\*)\sそれはグループ1の*This is a sub string*と一致します。次に-$1-に置き換えてください。

1

この1

/(?<=\*.*)\s(?=.*\*)/g 

試みるが、あなたはそれでそれを使用したい場合、それはJS

+0

私はこれを考えましたが、(少なくともPHPでは)このエラーが出ます:コンパイルに失敗しました:lookbehindアサーションは固定長ではありません – nobody

+0

interresting、私はPHPで試してみませんでした。おそらく正規表現には一定の制限があります。もちろん、正規表現インタープリタが使用するものに依存します。私が言ったように、例えばJSは全く見た目をサポートしていません。私はTextMateを持っていないので、それがどのようにサポートされているのか分かりません:) – petho

+0

'ABC *これはサブストリングです* DEF *これは別のサブです文字列* 'DEFの周囲のスペースも変換されます。 – nobody

0

使用この正規表現にではサポートされていない後読みも使用しているので、それは、JavaScriptで動作しません。アスタリスク内のスペースを取得する (.)(*(.(\).)*)(.) regex {4}によって提供される配列の4番目の要素を取り出し、ダッシュで置き換えます。

I find this site very good正規表現を作成します。

2
s/(?<!\*)\s(?!\*)(?!$)/-/g 

TextMateは(私はそれをすべて、申し訳ありませんとの経験がない)のPerlスタイルの正規表現のコマンドをサポートしている場合は、この作業をする必要がありワンライナーです。

+0

うわー、それ働いた。どうもありがとうございます! – Camsoft

+0

@Camsoft:この正規表現は、アスタリスクの間のスペースを置き換えませんが、アスタリスクのあとに続く/前にスペースは入れません。 'ABC DEF * substring here * GHJ IKL'のためには機能しません – Jens

+0

あなたは申し訳ありませんが、すぐに話をしました。 – Camsoft

関連する問題