Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python拆分新闻文章中的第一个句子,并使用re获取实际句子_Python_Regex - Fatal编程技术网

Python拆分新闻文章中的第一个句子,并使用re获取实际句子

Python拆分新闻文章中的第一个句子,并使用re获取实际句子,python,regex,Python,Regex,对于大多数新闻文章,第一句总是以位置开头,后跟连字符或逗号,例如 吉隆坡:周一,朝鲜和马来西亚就这一事件发生争执 对朝鲜领导人金正恩的兄弟遇害的调查 他在吉隆坡遭到致命袭击的那一刻的录像出现了 隆坡机场 波特兰,缅因州-FairPoint Communications已要求监管机构 停止为受监管固定电话注册新客户的许可 在斯卡伯勒、戈勒姆、沃特维尔、肯尼邦克和开普敦提供服务 伊丽莎白 我试着用re来区分下半句,这是主句,例如 周一,朝鲜和马来西亚就朝鲜核问题发生了争执 对朝鲜领导人金正恩的兄弟遇

对于大多数新闻文章,第一句总是以位置开头,后跟连字符或逗号,例如

吉隆坡:周一,朝鲜和马来西亚就这一事件发生争执 对朝鲜领导人金正恩的兄弟遇害的调查 他在吉隆坡遭到致命袭击的那一刻的录像出现了 隆坡机场

波特兰,缅因州-FairPoint Communications已要求监管机构 停止为受监管固定电话注册新客户的许可 在斯卡伯勒、戈勒姆、沃特维尔、肯尼邦克和开普敦提供服务 伊丽莎白

我试着用re来区分下半句,这是主句,例如

周一,朝鲜和马来西亚就朝鲜核问题发生了争执 对朝鲜领导人金正恩的兄弟遇害的调查 他在吉隆坡遭到致命袭击的那一刻的录像出现了 隆坡机场

我使用以下regrex将它们分开:

sep = re.split('-|:|--', sent)
但这并不适用于所有情况,第二句话的结果是:

['PORTLAND,Maine\xe2\x80\x94 FairPoint Communications已询问 监管机构要求获得停止与新客户签约的许可 沃特维尔市戈勒姆斯卡伯勒市受管制的固定电话服务, 肯尼邦克和伊丽莎白角

这和unicode有什么关系吗?或者我需要在re代码中传递不同格式的连字符吗

有没有一种通用的方法可以做得更好


谢谢

正如您所猜测的,问题在于字符串中存在unicode字符,因为在缅因州波特兰的
中,没有一个ASCII字符的值与em破折号相同。分隔符中的分隔符-FairPoint Communications
解释得不好,变成了
\xe2\x80\x94
,而不是
\u2014

有几个选项可以让你做你想做的事:

  • 将源代码编码定义为unicode(将
    #-*-编码:utf-8-*-
    设置为前两行之一),并将额外的字符添加到正则表达式中
  • 您可以使用其中一个可用库将字符串转换为ACSII(请参阅)
  • 使用与unicode兼容的正则表达式和re(
    sep=re.split(ur'-|::|-|-|\u2014',sent)
  • 或按照“重复使用模块”中的建议

因为第二句话包含字符,所以在执行代码之前,您需要按照python的默认编码进行编码。此外,您试图使用错误的字符
--
吐出句子。它必须是
-
(它是一个UNICODE)

python


分隔符是
'-'
,为什么要在
'-'
上拆分?如果可能,应该开始使用Python 3。。6@DYZ对不起,我没有说清楚,因为在一些句子中,他们使用“--”OP想在
chr(8212)
上拆分:“
pattern='[:{}]”。format(chr(8212))
-也可以(Python 3.6)。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
sent = "PORTLAND, Maine — FairPoint Communications has asked regulators for permission to stop signing up new customers for regulated landline service in Scarborough, Gorham, Waterville, Kennebunk and Cape Elizabeth."
sep = re.split('-|:|—', sent)
print sep