2017-02-24 13 views
0

ここには、必要なものの再現可能な例があります。単語HIV/AIDSがあるとします。私の質問は、このような文字列を検索し、文字列で置き換える正規表現を書く方法ですHIV_AIDSpythonを使って文字列を検索して置き換える正規表現を書くには?

これは私が書いた検索パターンです。これは実際には良いですか?

txt='DDD/VCD' #python 3.x 

re1='((?:[a-z][a-z0-9_]*))' # Variable Name 1 
re2='(\\/)' # Any Single Character 1 
re3='((?:[a-z][a-z0-9_]*))' # Variable Name 2 

rg = re.compile(re1+re2+re3,re.IGNORECASE|re.DOTALL) 
m = rg.search(txt) 

if m: 
var1=m.group(1) 
c1=m.group(2) 
var2=m.group(3) 
print ("("+var1+")"+"("+c1+")"+"("+var2+")"+"\n") 

私の上記のコードは、文字列(私は既に上述しているサンプル)を置き換えるために、私はさらにコードを書く助けてください十分に良好であれば。

私はまだ正規表現の初心者ですが、python-3.5x以上を使用して、このための単純な正規表現を書いてみたいと思います。私はライブラリをpythonで見つけましたが、私はライブラリを使用せずにそれを書き込もうとしています。どんな助けもありがとう。ありがとうございました。

+0

これはhttp://codereview.stackexchange.com/に適しかもしれません。 –

+1

"[私は]単純な正規表現を書こうと思っています...ライブラリを使わずに書いてみようとしています。独自の正規表現エンジンを作成しますか?それとも、正規表現なしでやりたいのですか? –

+0

@tobias_k私はif/else条件を使ってマッチングして置き換えることによって、直接書くことを意味しました。 –

答えて

2

re.sub機能を使用できます。置換は、コンパイラが一致を検出した場合にのみ発生する必要があります。そうしないと、変更なしで入力文字列が返されます。

>>> re.sub(r'(?i)\b([a-z][a-z0-9_]*)/([a-z][a-z0-9_]*)\b', r'\1_\2', 'DDD/VCD') 
'DDD_VCD' 
>>> 

又は

必要に応じて正規表現をコンパイル。

reg = re.compile(r'(?i)\b([a-z][a-z0-9_]*)/([a-z][a-z0-9_]*)\b') 
reg.sub(r'\1_\2', 'DDD/VCD') 

\b非単語の文字または(_vice_versa_)から別の単語文字に役立ちますワード境界

+0

regexをコンパイルする必要はありますか? –

+0

なぜreg変数の末尾に\ bがあるのですか?それを理解するのを手伝ってください。私は彼らの残りの部分を理解しています。 –

+1

同じ正規表現を多くの場所で使用する場合は、コンパイルする方がよいでしょう。あなたがその場でそれをしたい場合は、最初のオプションを使用してください。 –

関連する問題