2016-05-27 1 views
1

私は前に、オプションのスペースで、CHAR :またはchar (の最初の出現まで、すべてを取得するために正規表現をしたいと思います正規表現は:すべてを一致させるまで `:`や `(`

を、このテキストを取ります。:予想

foo : bar 
foo bar: baz 
foo (bar): baz 

<foo>: bar 
<foo bar>: baz 
<foo> (bar): baz 

私はこの(.*[:\(])を試してみましたが、これは与える:

<foo :> bar 
<foo bar:> baz 
<foo (bar):> baz 

私は、Python 3.5を使用していますhttps://regex101.com/r/sR4hA5/1

を参照してください。

+0

どうか^(。*)[:\(] ' –

+0

@ JonathanParentLevesque:あまりにも貪欲です。 –

答えて

4

あなたは

^([^:(]+?)(\s*[:(]) 

を使用して<\1>\2で置き換えることができます。 regex demoを参照してください。

パターンが一致:

  • ^を - 文字列
  • ([^:(]+?)の開始 - グループ1 :(以外の1つの以上の文字に一致するが、できるだけ少ないアップ最初の...
  • (\s*[:(]) - グループ2:0以上の空白の後に:または(が続きます。

怠惰な数量詞+?は、グループ2に

Python 3 demoスペースが落ちる "後" を強制するために必要とされています

import re 
p = re.compile(r'^([^:(]+?)(\s*[:(])', re.MULTILINE) 
s = "foo : bar\nfoo bar: baz\nfoo (bar): baz" 
result = p.sub(r"<\1>\2", s) 
print(result) 
+0

私はいくつかの説明を追加しました。ちょうど私がデモで1つの変数の名前を変更できなかったことを知り、それを修正しました。さて、すべてが動作しているようだ。 –

+0

ちょうど完璧!ありがとうございました! – roipoussiere

1

^[^(:]*[^(:\s]

enter image description here

このバージョンではありません後尾をつかまえない':'または '\ s'

関連する問題