匹配由另一个正则表达式划分的所有内容?

时间:2014-10-22 15:18:35

标签: python regex sentence

我正在尝试制作一个正则表达式,它会找到一个文本块中的所有句子,到目前为止我已经得到了这个;

(?=(?<!mr)\.|(?<!mrs)\.|\?|!)+

将找到分隔句子的所有内容。我希望正则表达式找到这个正则表达式找到的所有内容,但我真的不知道从这里去哪里。

2 个答案:

答案 0 :(得分:1)

这个怎么样:

import re

pattern = r'(?=(?<!mr)\.|(?<!mrs)\.|\?|!)+' # I'm assuming this does what you say it does :)
text_block = """long block of sentences"""

sentences = re.split(pattern, text_block)

sentences将是包含结果子字符串的列表。 re.split会将text_block拆分为返回的list的不同元素。它在pattern匹配的每个点处分裂。

在这里阅读:

https://docs.python.org/2/howto/regex.html

编辑(从您关闭的新问题导入的数据):

如果你得到的符号是?,!等等,你应该尝试删除外部的parens,如下所示:

re.split(r"\.(?<!mr)|\.(?<!mrs)|\?|!", somestring)

例如:

sentences = [s for s in re.split(r"\.(?<!mr)|\.(?<!mrs)|\?|!", somestring) if s]

答案 1 :(得分:0)

(从已关闭的新问题中移出)
在你的情况下,外观应该在这些时期之前出现 冷凝你的表达,它是

更新 - 在它之间你可以拆分丢弃分隔符

 # (?:(?<!mr)(?<!mrs)\.|\?|!)+

 (?:
      (?<! mr )
      (?<! mrs )
      \.
   |  \?
   |  !
 )+

或者,拆分分隔符

 # ((?:(?<!mr)(?<!mrs)\.|\?|!)+)

 (
      (?:
           (?<! mr )
           (?<! mrs )
           \.
        |  \?
        |  !
      )+
 )