正则表达式构造从文本中获取句子-Python

正则表达式构造从文本中获取句子-Python,python,regex,string,Python,Regex,String,一个句子将是一系列字符: 以(但不包括)字符结尾。或文件的结尾 排除两端的空白,以及 不是空的 我有一个包含以下文本的文件: 这是第一句话。不是吗?对这\n\n最后一位:)也是一个句子,但是\n除了文件的结尾之外没有终止符\n 根据上述定义,其中有四个“句子”: 第1句:这是\n第一句 第二句:不是\n它 第三句:Yes 第4句:这\n\n最后一位:)也是一个句子,但是\n除了文件的结尾之外没有终止符 请注意: 这些句子不包括它们的终止符字符 最后一句话没有以字符结尾;它以文件结尾结束 句

一个句子将是一系列字符:

  • 以(但不包括)字符结尾。或文件的结尾
  • 排除两端的空白,以及
  • 不是空的
  • 我有一个包含以下文本的文件:

    这是第一句话。不是吗?对这\n\n最后一位:)也是一个句子,但是\n除了文件的结尾之外没有终止符\n

    根据上述定义,其中有四个“句子”:

    • 第1句:
      这是\n第一句
    • 第二句:
      不是\n它
    • 第三句:
      Yes
    • 第4句:
      这\n\n最后一位:)也是一个句子,但是\n除了文件的结尾之外没有终止符
    请注意:

    • 这些句子不包括它们的终止符字符
    • 最后一句话没有以字符结尾;它以文件结尾结束
    • 句子可以跨越文件的多行
    这就是我目前拥有的
    (.*\n+)
    ,我不知道如何改进它


    请我需要你的帮助,一个正则表达式,解构到上面的文本,并返回一个列表。提前感谢您的帮助。

    以下内容并非适用于所有人,但适用于您的特定输入。您可以进一步调整此表达式:

    ([^!?.]+)[!?.\s]*(?![!?.])
    

    详细信息

    • ([^!?。]+)
      -捕获与
      以外的1个或多个字符匹配的组1
    • [!?。\s]*
      -0或更多
      ,空格
    • (?![!?)
      -后面不跟
    在Python中,您需要将它与
    re.findall
    一起使用,它将只获取捕获组捕获的子字符串:

    import re
    rx = r"([^!?.]+)[!?.\s]*(?![!?.])"
    s = "this is the\nfirst sentence. Isn't\nit? Yes ! !! This \n\nlast bit :) is also a sentence, but \nwithout a terminator other than the end of the file\n"
    sents = re.findall(rx, s)
    print(sents)
    # => ['this is the\nfirst sentence', 
          "Isn't\nit", 
          'Yes ', 
          'This \n\nlast bit :) is also a sentence, but \nwithout a terminator other than the end of the file\n'
         ]
    
    请参见尝试以下操作:

    re.split('(\!\s\!+)|\.|\?',s)
    ['this is the\nfirst sentence', " Isn't\nit", ' Yes ', ' This \n\nlast bit :) is also a sentence, but \nwithout a terminator other than the end of the file\n']
    

    比如,你需要使用正则表达式吗
    nltk
    内置了一个固定的句子标记器。我今天才读到nltk,对我来说是新的。我会更仔细地研究它,不过正则表达式现在就可以了。多亏了Wiktor,它成功了@Wiktor Stribzew非常感谢。你能不能解释一下,让我下次再说一遍。如果不是太麻烦的话。对不起,我没有收到任何通知,请不要在
    @
    和用户名之间使用空格。嗨,我运行它时它返回了七个句子