正则表达式构造从文本中获取句子-Python
一个句子将是一系列字符:正则表达式构造从文本中获取句子-Python,python,regex,string,Python,Regex,String,一个句子将是一系列字符: 以(但不包括)字符结尾。或文件的结尾 排除两端的空白,以及 不是空的 我有一个包含以下文本的文件: 这是第一句话。不是吗?对这\n\n最后一位:)也是一个句子,但是\n除了文件的结尾之外没有终止符\n 根据上述定义,其中有四个“句子”: 第1句:这是\n第一句 第二句:不是\n它 第三句:Yes 第4句:这\n\n最后一位:)也是一个句子,但是\n除了文件的结尾之外没有终止符 请注意: 这些句子不包括它们的终止符字符 最后一句话没有以字符结尾;它以文件结尾结束 句
- 第1句:
这是\n第一句
- 第二句:
不是\n它
- 第三句:
Yes
- 第4句:
这\n\n最后一位:)也是一个句子,但是\n除了文件的结尾之外没有终止符
- 这些句子不包括它们的终止符字符
- 最后一句话没有以字符结尾;它以文件结尾结束
- 句子可以跨越文件的多行
(.*\n+)
,我不知道如何改进它
请我需要你的帮助,一个正则表达式,解构到上面的文本,并返回一个列表。提前感谢您的帮助。以下内容并非适用于所有人,但适用于您的特定输入。您可以进一步调整此表达式:
([^!?.]+)[!?.\s]*(?![!?.])
看
详细信息:
-捕获与([^!?。]+)
以外的1个或多个字符匹配的组1代码>,
,?
-0或更多[!?。\s]*
代码>,
,?
,空格
-后面不跟(?![!?)
代码>,
或?
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非常感谢。你能不能解释一下,让我下次再说一遍。如果不是太麻烦的话。对不起,我没有收到任何通知,请不要在@
和用户名之间使用空格。嗨,我运行它时它返回了七个句子