2015-06-28 5 views
0

Я пытаюсь разделить на следующие разделители: полная остановка, точка с запятой, *, +,? и - Тем не менее, я хочу только разделить на «-», когда это происходит в начале предложения (чтобы не разделить слова типа «нефункциональный»Regex, соответствующий нескольким разделителям

Я пробовал следующее, но я не делаю любой прогресс, любая помощь будет оценена:

sentences = re.split("[.-;]*[\+]*[\?]*[\*]*", txt) 

здесь текст образца Я пытался это на:

- Text Editor: Now you can edit plain text files with airport tools 
* Updated Dropbox support 
* Improved 
stability 
- New icon                   
* See this case mis-alignment 

Ожидаемый результат после раскола список товаров:

TextEditor: Now you can edit plain text files with airport tools, Updated Dropbox support, Improved stability, New icon, See this case mis-alignment 
+0

Что вы подразумеваете под этим, что вы «не добились какого-либо прогресса»? Можете ли вы опубликовать, какая именно проблема? –

+0

Есть ли причина, по которой вы разделите свои разделители на разные наборы символов '[...]'? –

+1

Каков ожидаемый результат? – fferri

ответ

1

Вы можете использовать эту функцию re.split.

>>> import re 
>>> s = '''- Text Editor: Now you can edit plain text files with airport tools 
* Updated Dropbox support 
* Improved 
stability 
- New icon''' 
>>> [i for i in re.split(r'(?m)\s*^[-*+?]+\s*', s) if i] 
['Text Editor: Now you can edit plain text files with airport tools', 'Updated Dropbox support', 'Improved\nstability', 'New icon'] 
+0

спасибо Авинаш ... Я заметил, что вы использовали многострочную линию, как бы я пошел на расщепление, если в конце строки есть полная остановка, так как включена многострочная линия. – newdev14

+0

try '[i для i в re.split (r '(? M) \ s *^[- * +?] + \ S * | \. $', S), если i]' –

1

Попробуйте перечислить ваши разделителей, как это: ("[.; * +]")

re.split

1

, если вы хотите разделить вашу строку в определенном наборе разделители, чем сделать это таким образом:

>>> txt = '- Text Editor: Now you can edit plain text files with airport tools' 
>>> r = re.split(r'([.;*+?-]+)',txt) 
>>> r 
['', '-', ' Text Editor: Now you can edit plain text files with airport tools'] 

Если вы не хотите, чтобы получить в результате список этих разделителей, чем:

>>> r = re.split(r'[.;*+?-]+',txt) 
>>> r 
['', ' Text Editor: Now you can edit plain text files with airport tools'] 

EDIT: в ответ на ваш комментарий ниже, используйте \s для пространств:

>>> txt = '''- Text Editor: Now you can edit plain text files with airport tools 
    * Updated Dropbox support 
    * Improved 
    stability 
    - New icon''' 
    >>> r = re.split('(^|\s)+[.;*+?-]+($|\s)+',txt) 
    >>> [i for i in r if len(i) > 1] 
['Text Editor: Now you can edit plain text files with airport tools', 'Updated Dropbox support', 'Improved\n stability', 'New icon'] 
+0

спасибо, что работает почти идеально, за исключением того, что предложение разбивается на «-», где я не хочу, чтобы он разбивал e..g словами «переписан». В более общем плане, я хочу разделить на «-», если это происходит в начале предложения. – newdev14

+0

@ newdev14, обновите это в своем вопросе .. :) –

+1

сделано, спасибо ..... – newdev14

Смежные вопросы