我正在尝试制作一个正则表达式,它会找到一个文本块中的所有句子,到目前为止我已经得到了这个;
(?=(?<!mr)\.|(?<!mrs)\.|\?|!)+
将找到分隔句子的所有内容。我希望正则表达式找到这个正则表达式找到的所有内容,但我真的不知道从这里去哪里。
答案 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 )
\.
| \?
| !
)+
)