2016-01-12 4 views
4

У меня есть данные многих предложений, касающихся одного примера в качестве следующего предложения, я хочу, чтобы разделить его на 2 подразделам предложений:разделительные предложения в суб-предложения, используя пакет повторно в Python

И весь плазмы и d < 1,006 г/мл плотность плазмы от 2/2 мышей показывают эту широкую бета-миграционную картину (рис.1B) | T: ** 1SP3E3 | ; | I: ** 1SP3E3 | | L: ** 1SP3E3 | напротив, 3/3 плазмы показывают практически без липидного окрашивания в бета-положении. | T: ** 1SN3E3 | | I: ** 1SN3E3 | | L: ** 1SN3E3 |

разделить его на:

Оба цельной плазмы и г < 1,006 г/мл Плотность фракции плазмы от 2/2 мышей показать эту широкую картину бета-миграции (рис 1 б).

и

в отличие от этого, 3/3 плазмы не показывает практически никакого липидный окрашивания на бета-позиция.

Мой код:

newData =[] 
for item in Data: 
    test2= re.split(r" (?:\|.*?\| ?)+", item[0]) 
    test2 =test2[:-1] 
    for tx in test2: 
     newData.append(tx) 
print len(newData) 
print newData 

Однако, я получил 3 пунктов в результате, в том числе ;. Я проверил исходное предложение и обнаружил, что ; находится в |T:**1SP3E3| ; |I:**1SP3E3|, поэтому мне нужно удалить ; из результата. Я изменил свой код на

test2= re.split(r" (?:\|.*?\| ?;?)+", item[0]) 

Но я не могу получить правильный результат. Может ли кто-нибудь помочь? Большое спасибо.

+0

Не могли бы вы просто разделить строку на символ трубы и захватить каждый 6-й элемент результирующего списка? Вы ожидаете, что символ трубы будет и в самом тексте? – Evert

+0

're.split (r" (?: \ |. *? \ | [\ S;] *) + ", s)' может вас немного ближе. Это даст вам пустую третью строку, так как вторая серия «блоков кода» на самом деле ничего не расколола. – Evert

+0

Если он дает пустую третью строку, вы можете просто использовать функцию 'filter'. 'result = re.split (r" (?: \ |. *? \ | [\ s;] *) + ", s)' после этого использования фильтр 'result = filter (None, result)' –

ответ

-1

Этот шаблон соответствует части b: (?: ?\|.*?\|\ ?\;?)
Вы можете использовать свой код для разделения обеих частей.
Проверить here в regex101

1
[i.strip() for i in re.sub(r'\|\w:\*\*\w*\|', '', re.sub(r' +', r' ', s.strip())).split(';')] 

Возвращает

['Both whole plasma and the d < 1.006 g/ml density fraction of plasma from 2/2 mice show this broad beta-migration pattern (Fig. 1 B)', 'in contrast, 3/3 plasma shows virtually no lipid staining at the beta-position.'] 

Но взять с зерном соли, так как это зависит от того, если ваш текст согласуется с вашим примером.

0
import re 
x="""Both whole plasma and the d < 1.006 g/ml density fraction of plasma from 2/2 mice show this broad beta-migration pattern (Fig. 1 B) |T:**1SP3E3| ; |I:**1SP3E3| |L:**1SP3E3| in contrast, 3/3 plasma shows virtually no lipid staining at the beta-position. |T:**1SN3E3| |I:**1SN3E3| |L:**1SN3E3|""" 
print [i for i in re.split(r"(?:\|[^:]*:.*?\|(?:[\s;]+|$))+",x) if i] 

Вывод будет выглядеть следующим образом:

[ 'Оба всей плазмы и д < 1,006 г/мл Плотность фракции плазмы от 2/2 мышей показать эту широкую картину бета-миграции (рис 1 B) ',' напротив, 3/3 плазмы практически не имеют окрашивания липидов в бета-положении. ']

0

импорт повторно

строки = [str.strip() для ул в re.sub (' \ | \ ш: ** \ ш + \ |», '', строка).split (';')]

Выход будет: ['Обе плазмы и d < 1,006 г/мл плотности плазмы от 2/2 мышей показывают эту широкую бета-миграционную картину (рис. 1 B) ',' incontrast, 3/3 плазмы практически не содержат липидного окрашивания в бета-положении. ']

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