2016-10-24 12 views
0

文字列の先頭から削除したい単語がいくつかあります。例えば :set = {"aba", "bcd"} ストリング"aba bcd aba aba aaa"結果については、"aaa"でなければならず、文字列の
​​結果は"abacaba"であるべきです。 regexpで行の先頭にある文字列をすべて削除します

私はこの

import re 
inp = "lalala bababa qqqq n" 
pat = re.compile(r"^([la |ba ]+") 

print pat.sub("+", inp) 

を試みたが、それはすべてのwitespacesを無視する理由出力は、

+qqqq n 

私は理解していないのですか? 正しいregexpは何ですか?

答えて

1

正規表現またはそれ以上のスペースは'aba +'です。
単語の正規表現bcdとそれに続く1つ以上のスペースは'bcd +'です。
いずれかの正規表現は'(aba +|bcd +)'です。
1回以上繰り返すことは'(aba +|bcd +)+'です。

空の文字列とすることを置き換える:

re.sub(r'^(aba +|bcd +)+', '', 'aba bcd aba aba aaa') 
+0

うん、それは ありがとう作品:

re.sub(r'(aba +|bcd +)+', '', 'aba bcd aba aba aaa') 

検索文字列が先頭であることを強制します! – brachistochron

0
inp = "lalala bababa qqqq n" 
inp = inp.split() 

INPのでこれはおそらく代わりに欲しかったものである

inp[-1] 
0

と最後の部分を取ることになりました['lalala','bababa','qqqq','n']

です:1に続く単語abaため

In [28]: pat = re.compile(r"^(la |ba)+") 

In [29]: pat.sub('+', 'lalala bababa qqqq n') 
Out[29]: 'lalala bababa qqqq n' 

In [30]: pat.sub('+', 'la ba qqqq n') 
Out[30]: '+qqqq n' 
関連する問題