【问题标题】:Regex loses last character正则表达式丢失最后一个字符
【发布时间】:2012-12-27 22:53:25
【问题描述】:

我的正则表达式是(?<![\u0410-\u042F])[.!?](?=(\s)?(\s)?[\u0410-\u042F]|[\u04E8]|["]|[\u201C]|![0-9])

我想把一个段落分成句子。

我用 re.split() 做正则表达式并打印数组

这是我做的一个示例输入:

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

除了最后一个字符(在本例中为句点、? 或 !)被删除之外,打印效果很好!

我在网上搜索,它说要在标点符号周围加上前瞻标签,但它不起作用。

我正在使用 Python 3。

【问题讨论】:

    标签: regex python-3.x


    【解决方案1】:

    在要在拆分中保留的字符周围放置一个捕获组:

    (?<![\u0410-\u042F])([.!?])(?=(\s)?(\s)?[\u0410-\u042F]|[\u04E8]|["]|[\u201C]|![0-9])
    

    句点将作为新元素添加到结果列表中。来自documentation

    如果在模式中使用捕获括号,则模式中所有组的文本也会作为结果列表的一部分返回。

    如果您不希望这样,则必须在空格本身上进行拆分,方法是确保空格之前有其他标点符号的匹配句点(使用后视断言)。

    【讨论】:

    • 但这会将句点放在新的一行:(
    • @user1925847:您可以将其合并回上一行,或者使用不同的表达式进行拆分,即空格。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多