2016-04-27 8 views
0

存在する分割文タグのフォーマット私は言葉に文章を分割するために、次の正規表現を使用し

import re 
re.split("('?\w[\w']*(?:-\w+)*'?)","'cos I like ice-cream") 

が得られます。しかし

['', "'cos", ' ', 'I', ' ', 'like', ' ', 'ice-cream', '!'] 

書式設定タグがテキストに表示されることがあり、私の正規表現は明らかにそれらを処理できません。

re.split("('?\w[\w']*(?:-\w+)*'?)","'cos I <i>like</i> ice-cream!") 

ができます:

['', "'cos", ' ', 'I', ' <', 'i', '>', 'like', '</', 'i', '> ', 'ice-cream', '!'] 

私が好きだろうが:

['', "'cos", ' ', 'I', ' <i>', 'like', '</i> ', 'ice-cream', '!'] 

はどのようにあなたはこれを解決するに行きますか?

+0

興味があるだけ、なぜあなたは、このような ' '''、または '」「'として、これらの空の文字列を保っていますか? – Quinn

+0

@ccf奇数の要素は単語であり、偶数は偶数ではないことがわかっているからです。 – Baz

答えて

1

あなたは否定後読みと先読みアサーションを使用したマッチの除外を指定して、ワード境界正規表現を使用することができます。

^|(?<!['<\/-])\b(?![>-]) 

Regex demo.

あなたが持っているので、残念ながら、Pythonの正規表現エンジンは、splitting on zero-width charactersをサポートしていません。回避策を使用します。

import re 

a = re.sub(r"^|(?<!['<\/-])\b(?![>-])", "|", "'cos I <i>like</i> ice-cream!").split('|'); 
print(a) 

# ['', "'cos", ' ', 'I', ' <i>', 'like', '</i> ', 'ice-cream', '!'] 

Python demo.

0
# I added a negative lookahead to your pattern to assert bracket > is closed properly 

import re 
print re.split("('?\w[\w']*(?:-\w+)*'?(?!>))","'cos I <i>like</i> ice-cream!") 

[Output] 

['', "'cos", ' ', 'I', ' <i>', 'like', '</i> ', 'ice-cream', '!'] 
関連する問題