2016-03-30 8 views
1

ドル記号で囲まれた文字列内のすべてのドットを置き換える必要があります。 ネストされた構造はないので、正規表現はこれに適したツールだと思います。ドル記号を囲んですべてのドットを一致させる正規表現

例の文字列は次のようになります。

asdf $asdf.asdf.$ $..asdf$ 

私はドル記号内の一致部分を思い付いたが、私はドル記号(example)内の各ドットの一致をしたい正規表現:

\$([^$]*)\$ 

文字列の例では、4つのマッチが得られるはずです。それをどうすれば実現できますか?

+0

正規表現の味は何を参照してください?あるいは、プログラミング言語は何ですか? –

+0

[?(?:\ $(?!(?:[^ $] * \ $ [^ $] * \ $)* [^ $] * $)|(?!^)\ G)[^ $ 。] * \ K \ .'](https://regex101.com/r/vD1fE4/2)(PCREの場合)。 –

+0

プログラミング言語はPythonですが、私はpcreモジュールを使うことができますので、あなたの表現もうまくいくと思います。 – aem

答えて

2

をドットカウント:

import re 
s = "a.sdf $asdf.asdf.$. . .$..asdf$" 
r = re.compile(r'\$([^$]*)\$') 
print(r.sub(lambda m: m.group().replace('.',''), s)) 
# => a.sdf $asdfasdf$. . .$asdf$ 

IDEONE demo

0

ドル記号を数えなければならないので、これは正規表現では非常に難しいと思います(2つのドル記号の間のすべての2番目の隙間を "囲まれた"ものにしたい、 ?)

だから、それはあなたのリスト

  • を与えるmystring.split('$')が、その後、すべての2番目の項目、例えばを取るん

    • )Pythonの例(に簡単に思えますnewlist = oldlist[1::2]
    • あなたは、Pythonを使用しているので、最も簡単な解決策は$から$にサブストリングに一致するように、あなたのパターンを使用して、あなたがラムダで欲しいもので.を交換することである(''.join(newlist).count('.')