2012-04-19 18 views
0

私の現在の正規表現バトルは、文字列内の数字の前にあるすべてのコンマを置き換えています。正規表現では、その後に続くすべてのカンマを無視する必要があります。私は約1時間ルビラールの周りにねじ回してきたとはかなり動作するように見えることはできません。ruby​​でルックアヘッドを使用した正規表現

テスト文字列...

'this is, a , sentence33 Here, is another.' 

所望の出力...

'this is comma a comma sentence33 Here, is another.' 

だから、あなたにいくつかの背景を与えること

testString.gsub(/\,*\d\d/,"comma") 

...の線に沿って何か、私は少し掻き分けサイドプロジェクトをやっている。私が集めている要素は、大体2桁の年齢で始まるカンマ区切りです。しかし、時には、コンマを含む可能性のある年齢より前の見出しがあります。私が後で設定した構造を維持するために、見出しのカンマを置き換える必要があります。

...

をスタックオーバーフローの答えを試した後、私はまだいくつかの問題を抱えています。私のコンマフィルタリングはすべてのケースで動作するように、これらの、「X-X」笑うが、ここで問題を引き起こしてthatsのをこする画面から実際のラインです...

statsString =  "    23, 5'9\", 140lb, 29w,      Slim,     Brown  Hair,    Shaved Body,    White, Looking for  Friendship, 1-on-1 Sex, Relationship. Out  Yes,SmokeNo,DrinkNo,DrugsNo,ZodiacCancer.  Versatile,     7.5\"     Cut, Safe Sex Only,  HIV  Negative, Prefer meeting at:Public Place.     PerformerContact xxxxxx87             This user has TURNED OFF his IM          Send Smile  Write xxxxxx87 a message:" 

私は追加これらの断片の全てにまずしないでくださいテキストの有無にかかわらず、実際の修正が続いています。出力は...以下の未

statsString = 'xx, ' + statsString 

statsString = statsString.gsub(/\,(?=.*\d)/, 'comma'); 

=> "xxcomma    23comma 5'9\"comma 140lbcomma 29wcomma      Slimcomma     Brown  Haircomma    Shaved Bodycomma    Whitecomma Looking for  Friendshipcomma 1-on-1 Sexcomma Relationship. Out  YescommaSmokeNocommaDrinkNocommaDrugsNocommaZodiacCancer.  Versatilecomma     7.5\"     Cutcomma Safe Sex Onlycomma  HIV  Negativecomma Prefer meeting at:Public Place.     PerformerContact xxxxx87             This user has TURNED OFF his IM          Send Smile  Write xxxxxxx87 a message:" 
+2

なぜHere'を交換 'の後にコンマではないでしょうか? 'ここは大文字で始まるから?要件についてもう少し詳しく説明する必要があります。そして、おそらく、入力と希望出力の例がいくつかあります。あなたは「数字の前にコンマを置き換える」と言っていますが、それはあなたの例がやっていることではありません。 – alan

+0

これを1つの正規表現で行うのは失敗のようです。これは解決しなければならない宿題の問題か、単に問題を解決しようとしていて、正規表現がそれを解決する最善の方法だと思ってしまったのですか? – sarnold

+0

質問に背景情報を追加しました。フィードバックをお寄せいただきありがとうございます。 –

答えて

2

コード:

testString = 'this is, a , sentence33 Here, is another.'; 
result = testString.gsub(/\,(?=.*\d)/, 'comma'); 
print result; 

出力:

this iscomma a comma sentence33 Here, is another.

テスト:

http://ideone.com/9nt1b

+0

@ user1306973 - 探しているコードは上記のコードですか? –

+0

数字が(少なくとも)2桁であることが確かであれば、正規表現で '\ d'を' \ d \ d'に置き換えることができます。しかし、 '\ d'を使うと、その数字の桁数にかかわらず、あなたが質問していることをするでしょう。 –

+0

ありがとうございました。それがトリックでした。唯一の問題は、いくつかの条件付きロジックです。 2桁に先行する見出しが存在しないとき、正規表現は私がdownsetramを必要とするすべてのコンマを無効にします。 testString.gsub(/^\、(?=。* \ d)/、 'カンマ')を試してみてください。または何か似ている –

1

とても短いですが、あなたのタスクを解決するためのようだ:

str = 'this is, a , sentence33 Here, is another.' 

str = str.match(/(.*)(\d+.*)/) do 

    before = $1 
    tail = $2 

    before.gsub(/,/, 'comma') + tail 
end 

print str 
+0

ありがとう、Vache。私は新しいstackoverflowです。 – parallelgeek

+0

* something *がマッチに続くかどうかをチェックするには、 '(?= X)'を使う必要があります。 'X'はマッチの後ろにあるべきものです - この場合は何も無しです' \ d'、次に '(?=。* \ d)'、ようこそStackoverflowへ。 –

関連する問題