首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python提取每个包含引语的句子

Python提取每个包含引语的句子
EN

Stack Overflow用户
提问于 2014-06-19 04:30:37
回答 2查看 85关注 0票数 0
代码语言:javascript
复制
with open(searchfile) as f:

pattern = "\.?(?P<sentence>.*?\(([A-Za-z0-9_]+)\).*?)\."
for line in f:
    match = re.search(pattern, line)
    if match != None:
        print match.group("sentence")

我试图提取括号中包含首字母缩略词的每一个句子(本质上是2-4个字母,括号中的所有大写)。

以下是一个(ABC)例子。不包括这句话。包括这个(AB)一个。还有(AVCD)这个。

输出:这里是一个(ABC)例子。包括这个(AB)一个。还有(AVCD)这个。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-19 04:34:03

你可以用这个:

代码语言:javascript
复制
[^.]*?\([A-Z]{2,4}\)[^.]*\.

但是请注意,这是一种特别低效的方法,因为模式从一个非常宽松的子模式开始。您可以通过在开始时添加一种锚来纠正这一点:

代码语言:javascript
复制
(?:(?<=.)|^)[^.]*?\([A-Z]{2,4}\)[^.]*\.

不幸的是,即使有了这个锚,regex引擎也必须检查字符串中大多数字符的两个选项。

一种更好的方法可能是找到以首字母缩写开头的子字符串,直到句子和点的结尾,然后使用每个结果的末尾偏移量来提取子字符串:

代码语言:javascript
复制
#!/usr/bin/python

import re

txt = 'Here is an (ABC) example. Do not include this sentence. Include this (AB) one. And (AVCD) this one.'

pattern = re.compile(r'([!.?])(?=\s)|\([A-Z]{2,4}\)[^.]*(?:\.|$)')
offset = 0
result = ''
for m in pattern.finditer(txt):
    if (m.group(1)==None):
        result += txt[offset:m.end()]
    offset = m.end()

print result     

注意:你可以确定一个圆点代表一个句子的结尾,它可以是其他的东西。

票数 1
EN

Stack Overflow用户

发布于 2014-06-19 04:48:43

一个更有效的模式

代码语言:javascript
复制
([^.(]++\([^.)]++\)[^.)]++\.)

演示

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24298809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档