2017-01-14 21 views
1

別の特定の文字の前にある特定の文字を削除するにはどうすればよいですか?文字列で

my_string = 'log (x)' 
私はすべてのスペースを削除する必要が

左括弧の前で' ''('

このpostは、使用することを提案している:

それは持っているので、やり過ぎである
re.sub(r'.*(', '(', my_string) 

my_string[my_string.index('('):]と同じ効果を持ち、削除する'log'

別の特定の文字の前にあるすべてのスペースを削除するregexprマジックはありますか?

+0

パーサーを作成していますか?正規表現の代わりにペグを使用することを検討してください – fafl

+0

RednawとJean-Francoisの両方の解決策が私の問題を解決します。それが理にかなっていれば、非再ベースのバージョンのJFを受け入れることができます。 – Pythonic

+0

fafl、はい、パーサーのように、あなたはペグ、plsを詳述できますか? – Pythonic

答えて

3

使用前方先読み

括弧の間の実体が消費されない
re.sub(r"\s+(?=\()","",my_string) 

(置き換えられない)?=オペレータのおかげで、と\s+試合空白の任意の数(タブ、スペース、何でも)。

そして、正規表現のない別の可能性:

"(".join([x.rstrip() for x in my_string.split("(")]) 

(その後、リストの内包内rstrip()を適用する同じ文字でそれをバックに参加、(に応じて文字列を分割)

4

理由だけではなく:

re.sub(' +\(', '(', my_string) 
+0

答えをいただきありがとうございます受け入れるべき解決策を選択するための私のコメント。 – Pythonic

1

あなたはを参照して、先読みアサーションを使用することができますPythonドキュメントの

import re 

my_string = 'log (x)' 
print(re.sub(r'\s+(?=\()', '', my_string)) 
# log(x) 
関連する問題