【问题标题】:Looking for a regex pattern for capturing phrases until dot寻找用于捕获短语直到点的正则表达式模式
【发布时间】:2019-04-12 20:09:37
【问题描述】:

我有一个像这样的长文本:

text = 'Quisiera yo detectar los puntos... pero solo los puntos aislados. Los puntos suspensivos no los quiero detectar. A eso me refiero.'

我想得到这个输出:

phrases = ['Quisiera yo detectar los puntos... pero solo los puntos aislados.',
' Los puntos suspensivos no los quiero detectar.',
' A eso me refiero.']

问题是第一个短语中的三个点。我找不到将它们与常见的单点分隔符区分开来的正则表达式。有没有办法用正则表达式来实现它?

【问题讨论】:

    标签: python regex lookahead


    【解决方案1】:

    您想以不同方式处理 ..(或 ... 等)并将其与否定前瞻组合:

    (?:[^.]|\.{2,})+\.
    

    解释:

    • (?:[^.]|\.{2,})+ 将匹配由非. 字符 2 个或多个.s
    • 组组成的任何字符串
    • \. 当然需要句号

    这是demo

    【讨论】:

    • 这种方法与re.findall 配合得很好。例如:re.findall(r'(?:[^.]|\.{2,})+\.', text)
    • 这是我的首选解决方案,因为它不对句号之后的字符做出假设。因此,如果缺少空格或存在某种类型的标点符号,则正则表达式仍然有效。
    【解决方案2】:

    您可以使用正向后视来仅分割前面不超过一个点的空白。这种方法会忽略任何 2 个或更多点的序列。

    例如:

    import re
    
    s = 'Quisiera yo detectar los puntos... pero solo los puntos aislados. Los puntos suspensivos no los quiero detectar. A eso me refiero.'
    
    sentences = re.split(r'(?<=[^.]\.)\s', s)
    print(sentences)
    # ['Quisiera yo detectar los puntos... pero solo los puntos aislados.', 'Los puntos suspensivos no los quiero detectar.', 'A eso me refiero.']
    

    【讨论】:

      【解决方案3】:

      试试这个...

      import re
      
      text = 'Quisiera yo detectar los puntos... pero solo los puntos aislados. Los puntos suspensivos no los quiero detectar. A eso me refiero.'
      
      pattern = r"(?<=\.)\s(?=[A-Z])"
      re.split(pattern, text)
      

      结果应该是……

      ['Quisiera yo detectar los puntos... pero solo los puntos aislados.',
       'Los puntos suspensivos no los quiero detectar.',
       'A eso me refiero.']
      

      我的回答基于this SO answer

      更新:
      使用regex 标签查看一些答案,我遇到了这个metadiscussion 和这个answer。我的答案不是来自对正则表达式的先天知识,而是来自于花费大约 17 分钟谷歌搜索不同的搜索词并在 Stack Overflow 上闲逛。在中间的 17 分钟左右,我花了我的时间来制作我的答案,另外两个答案出现了。
      我意识到我的答案更像是“给我看代码”而不是“教人钓鱼”之类的答案。归根结底,我想说的是,当我急需帮助时,我希望有人向我展示代码。但是能够通过谷歌搜索问题的解决方案是一项重要的技能,但也是一种可怕的药物。希望我的解决方案有所帮助,但我也强烈建议您查看更新中的链接。如果有任何关于regex 标记状态的观点以及关于使堆栈溢出更有意义的观点。

      【讨论】:

        猜你喜欢
        • 2012-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-26
        • 2012-03-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多