2017-08-18 10 views
1

私はこの文があります:あなたは2つのパイプ文字は、その文にある見たよう transportumum min kalo dari kota|tua | mau ke galeri nasional naik transjakarta jurusan apa ya?Pythonでregexを使って特定の文字の前後に空白を追加するには?

を、私はそれならばスペースなしで単語の途中でパイプの前後にスペースを追加したいです。例えば:kota|tua

kota | tuaにこれは、これまで私のコードです:

def puncNorm(text): 
    pat = re.compile(r"\D([|:])\D") 
    text = pat.sub(" \\1 ", text) 
    return text 

text = "transportumum min kalo dari kota|tua | mau ke galeri nasional naik transjakarta jurusan apa ya?" 

text = puncNorm(text) 

結果は、すべてのパイプ文字にスペースを追加します。だから、tua | mauにダブルスペースがあります。

transportumum min kalo dari kota | tua | mau ke galeri nasional naik transjakarta jurusan apa ya? 

私の予想結果は次のとおりです。

transportumum min kalo dari kota | tua | mau ke galeri nasional naik transjakarta jurusan apa ya? 

この問題を解決する最良の方法は何ですか?

答えて

2

\Dパターンは、数字以外の任意の文字と一致します。あなたはシンボルが単語内のときにのみ一致させるために、ここでワード境界を使用することがあります。

r'\b([|:])\b' 

あなたが全体を交換する必要がありますよう、あなたも(...)を取り除くことregex demo

ノートを参照してください。一致。 Pythonでは、マッチ全体への逆参照は\g<0>です。

Python demoを参照してください:

import re 
rx = r'\b[|:]\b' 
s = "transportumum min kalo dari kota|tua | mau ke galeri nasional naik transjakarta jurusan apa ya?" 
print(re.sub(rx, ' \g<0> ', s)) 
# => transportumum min kalo dari kota | tua | mau ke galeri nasional naik transjakarta jurusan apa ya? 
1

\はね `のようにあなたは、単にここquantifiersを使用することができます*

*は(直前の表現

>>> text = "transportumum min kalo dari kota|tua | mau ke galeri nasional naik transjakarta jurusan apa ya?" 
>>> re.sub(r'(\s*\|\s*)',' | ',text) 
'transportumum min kalo dari kota | tua | mau ke galeri nasional naik transjakarta jurusan apa ya?' 
+0

0以上この' r 'を意味\ s * \ | \ s *)(?is) ''パターンは' |||||| 'string(https://regex101.com/r/sblqk4/1)の[find | '(?is)'修飾子はここでは意味をなしません:パターンに '.'や文字はありません。 –

+0

私は自分の答えを削除すべきですか? –

+0

OPのために役立つと思われる理由を説明しても問題ありません。要件があります:*スペースのない単語の真ん中に*。それで、私はメモを追加したのです。 –

関連する問題