2016-04-09 2 views
2

2桁の間になければ、ドットの後ろにスペースを追加するためにregexpsを使って置換を実装する必要があります。グループの正規表現と共通部分

a.a -> a. a 
7.7 -> 7.7 

は、私はいくつかのルールがあり、ここではそれらの一つであり、それを実装するには、次の

text = (re.compile(u'(\D)(\.)(\D)')).sub('\\1\\2 \\3', text) 

私は数字以外の記号の間のドットの後にスペースを追加、交換を期待しますが、入力

ため
a.b.c.d.e 

結果は

a. b.c. d.e 

したがって、いくつかのシンボルの間にスペースはありません。 'a.b'が最初にマッチした後に 'b'が 'b.c.d'の一部として処理されていないように見えます。この動作を修正することは可能ですか?

ありがとうございます!

+0

あなたは –

+0

何が 'ハローworld.'ために起こるべき先読み/後読みアサーションを使用することができますか?あなたはどこにでも、または非数字の文字を具体的に描くことの間に期間を意味しますか? –

+0

しかし、問題があります。 'digit-dot-digit'だけを除外したいなら正規表現は' digit-dot-notdigit'や 'notdigit-dot-digit'と一致しません。 – sln

答えて

2

正規表現が重複する文字列と一致しません。あなたはそれがあまりにも重なった文字列に一致するようにするためにlookaroundベースの正規表現を使用することができます。

>>> regex = re.compile(u'(?<=\D)(\.)(?=\D)') 
>>> 
>>> regex.sub(r'\1 ', "a.b.c.d.e") 
'a. b. c. d. e' 
+0

私は理解していません、OPは文字通りこれが期待される結果だと言っています。紀元前。 d.e'、これではありません。 b。 c。 d。 @ – Shafizadeh

+0

@Shafizadeh、それは彼らが欲しくない出力、すなわち現在彼らが得ているものです。 –

+0

@PadraicCunningham Oh ...そうだね。頭のためのThx。 – Shafizadeh