【问题标题】:how to extract all quotes in a document/text using regex?如何使用正则表达式提取文档/文本中的所有引号?
【发布时间】:2015-03-18 05:44:39
【问题描述】:

我正在尝试使用 python 正则表达式提取文档中出现的所有引用。

我有如下代码,但它不起作用:

import re
hand = open('citi.txt')
for line in hand:
    line = line.rstrip()
    if re.search('(?:"(.*?)")', line):
        print line

【问题讨论】:

  • 请定义“不工作”。你观察到什么问题?此代码应打印至少出现两次 '"' 的每一行——这 不是 你想要的吗?请举一个小例子说明你想要什么和你得到什么(用玩具大小的city.txt,比如说,三个小线)。
  • 我知道你说的是正则表达式,但是...... open('citi.txt').read().replace('"', '') 怎么样?
  • 将 if 语句更改为 print re.search(r'(?:"(.*?)")', line).group(1)
  • 这是来自文件的 sn-p:Citibank, NA(“CBNA”)将在本协议日期或之后,向 HighArc Capital Management, LP(“交易对手”)提供有关以下方面的某些信息可能出售全部或部分特定债务(“贷款”),包括在佛罗里达州迈阿密的 Shore Club 的权益(“信息”和任何此类交易,“交易”)。 -----> 我要提取的是:交易+信息+贷款+交易对手+CBNA

标签: python regex nlp nltk


【解决方案1】:

您可以使用re.findall('(?:"(.*?)")', line) 仅从行中提取引用的文本,而不是打印整行,即使每行出现多次。你的代码可以修改如下:

import re

# This will make sure citi.txt is properly closed after opening it.
# infl.read() will read the whole file as single string, so no need to loop
with open('citi.txt', 'r') as infl:
    hand = infl.read()

# And look for occurences of your string
match = re.findall('(?:"(.*?)")', hand)
if match:
    print match

例如如果line == 'This is "a sample" line with "two quoted" substrings',此代码将打印['a sample', 'two quoted']

编辑:适应 unicode

您的引号似乎是 unicode 字符。请注意“、”、“之间的细微差别(我最初也没有发现)。

我的原始答案和您的代码示例基于 ASCII 字符串,但您需要这样的正则表达式字符串:

match = re.findall(u'(?:\u201c(.*?)\u201d)', hand)

解释:\u201c 用于左双引号\u201d 用于右双引号u 将字符串标记为 Unicode。

这现在适用于您提供的摘录。

【讨论】:

  • 我试过了,但没有用。为了清楚起见,我试图找到并显示引用的所有内容,即文本中引用的每个“实例”。
  • 它什么也没返回。问题是否与引用的文本出现在括号内(“引用的文本”)这样的事实有关?你会如何处理括号?以下是完整摘录(谢谢!:))花旗银行,NA(“CBNA”)将在本协议日期或之后,向 HighArc Capital Management, LP(“交易对手”)提供有关潜在出售的某些信息某些债务(“贷款”)的全部或部分担保在佛罗里达州迈阿密的 Shore Club 的权益(“信息”和任何此类交易,“交易”)。 @Geotob
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-20
  • 1970-01-01
  • 2022-11-12
  • 2013-12-26
  • 1970-01-01
相关资源
最近更新 更多