正则表达式不止一次分裂

时间:2012-12-28 16:55:15

标签: python regex python-3.x

我写了这个正则表达式(在python 3中):(?<![\u0410-\u042F])([.!?])(?=(\s)?(\s)?[\u0410-\u042F]|[\u04E8]|["]|[\u201C]|![0-9])

我使用python的re.split()

用西里尔语分割句子。他们被\n隔开。所以应该分开这个:

Мамлекеттик айыптоочу Биринчи май райондук сотуна берген бул сунушун диний кастыкты ырбатпоо аракети менен негиздеди. Мусулмандарга акаарат келтирип жатат деген кайрылуу каттын негизинде УКМК Тезекбаевге каршы кылмыш ишин козгоп, сотко өткөргөн. Бул ишти бүгүн Биринчи май райондук соту карап бүттү жана өкүм эртең чыгарыларын маалымдады.

分开句子:

Мамлекеттик айыптоочу Биринчи май райондук сотуна берген бул сунушун диний кастыкты ырбатпоо аракети менен негиздеди.
Мусулмандарга акаарат келтирип жатат деген кайрылуу каттын негизинде УКМК Тезекбаевге каршы кылмыш ишин козгоп, сотко өткөргөн.
Бул ишти бүгүн Биринчи май райондук соту карап бүттү жана өкүм эртең чыгарыларын маалымдады.

但由于某种原因,这段时间(最后一个角色)被换上新线!!除了最后一个。

我看到他们说不要"()" [.!?],但如果我这样做,那么会删除标点符号。

1 个答案:

答案 0 :(得分:2)

最简单的方法是将捕获的点击重新附加到列表中的前一个元素上:

example = 'Мамлекеттик айыптоочу Биринчи май райондук сотуна берген бул сунушун диний кастыкты ырбатпоо аракети менен негиздеди. Мусулмандарга акаарат келтирип жатат деген кайрылуу каттын негизинде УКМК Тезекбаевге каршы кылмыш ишин козгоп, сотко өткөргөн. Бул ишти бүгүн Биринчи май райондук соту карап бүттү жана өкүм эртең чыгарыларын маалымдады.'

def reattach(sentences):
    punctuation = ('.', '!', '?')
    previous = ''
    for sentence in sentences:
        if sentence not in punctuation:
            previous = sentence
        else:
            yield previous + sentence
            previous = ''
    if previous:
        yield previous

punctuation = re.compile('(?<![\u0410-\u042F])([.!?])(?=(\s)?(\s)?[\u0410-\u042F]|[\u04E8]|["]|[\u201C]|![0-9])')
for sentence in reattach(punctuation.split(example)):
    print(sentence)

在示例输入上运行该方法会给我:

Мамлекеттик айыптоочу Биринчи май райондук сотуна берген бул сунушун диний кастыкты ырбатпоо аракети менен негиздеди.
 Мусулмандарга акаарат келтирип жатат деген кайрылуу каттын негизинде УКМК Тезекбаевге каршы кылмыш ишин козгоп, сотко өткөргөн.
 Бул ишти бүгүн Биринчи май райондук соту карап бүттү жана өкүм эртең чыгарыларын маалымдады.
相关问题