Python 如何使用正则表达式提取文档/文本中的所有引号?

Python 如何使用正则表达式提取文档/文本中的所有引号?,python,regex,nlp,nltk,Python,Regex,Nlp,Nltk,我试图使用python正则表达式提取文档中出现的所有引用 我有如下代码,但它不起作用: import re hand = open('citi.txt') for line in hand: line = line.rstrip() if re.search('(?:"(.*?)")', line): print line 您可以使用re.findall(“(?:“(.*)”,第行)仅从该行中提取引用的文本,而不是打印整行,即使每行出现一次以上。您的代码可以修改

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

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

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

您可以使用
re.findall(“(?:“(.*)”,第行)
仅从该行中提取引用的文本,而不是打印整行,即使每行出现一次以上。您的代码可以修改如下:

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
e、 g.如果
行=='这是带有“两个引号”子字符串的“样本”行
,则此代码将打印
['a sample','two quoted']

编辑:适用于unicode

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

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

match = re.findall(u'(?:\u201c(.*?)\u201d)', hand)
说明:
\u201c
表示左双引号,
\u201d
表示右双引号,
u
将字符串标记为Unicode


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

您可以使用
re.findall(“(?:“(.*)”),第行)
仅从该行中提取引用的文本,而不是打印整行,即使每行出现一次以上。您的代码可以按如下方式修改:

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
e、 g.如果
行=='这是带有“两个引号”子字符串的“样本”行
,则此代码将打印
['a sample','two quoted']

编辑:适用于unicode

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

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

match = re.findall(u'(?:\u201c(.*?)\u201d)', hand)
说明:
\u201c
表示左双引号,
\u201d
表示右双引号,
u
将字符串标记为Unicode


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

请定义“不起作用”。你到底观察到了什么问题?这段代码应该打印每一行中至少有两次出现的
“,”
——这不是你想要的吗?请给出一个小例子,说明你想要什么和得到什么(用一个玩具大小的
city.txt
,比如说,三行小的行)。我知道你说的是regex,但是……open('citi.txt')。read()。replace(“,”)将您的if声明更改为打印检索(r'(?:“(.*)”),第行)。第(1)组以下是文件中的一个片段:花旗银行(“CBNA”)将在本协议日期当天或之后向HighArc Capital Management,L.P.(“交易对手”)提供关于可能出售佛罗里达州迈阿密肖尔俱乐部权益的全部或部分债务(“贷款”)的特定信息(“信息”和任何此类交易(“交易”)。------>我想提取的是:交易+信息+贷款+交易对手+CBnaplese定义“不起作用”。你到底观察到了什么问题?这段代码应该打印每一行中至少有两次出现的
“,”
——这不是你想要的吗?请给出一个小例子,说明你想要什么和得到什么(用一个玩具大小的
city.txt
,比如说,三行小的行)。我知道你说的是regex,但是……open('citi.txt')。read()。replace(“,”)将您的if声明更改为打印检索(r'(?:“(.*)”),第行)。第(1)组以下是文件中的一个片段:花旗银行(“CBNA”)将在本协议日期当天或之后向HighArc Capital Management,L.P.(“交易对手”)提供关于可能出售佛罗里达州迈阿密肖尔俱乐部权益的全部或部分债务(“贷款”)的特定信息(“信息”和任何此类交易(“交易”)。------>我想摘录的是:交易+信息+贷款+交易对手+CBNAI尝试过,但没有成功。明确地说,我试图找到并显示引用的所有内容,即文本中引用的每一个“实例”,但没有返回任何内容。问题是否与引用的文本出现在括号内(“引用的文本”)这一事实有关,如是?你会如何处理括号?以下是完整摘录(谢谢!:)花旗银行(“CBNA”)将在本协议签署之日或之后,向HighArc Capital Management,L.P.(“交易对手”)提供有关可能出售佛罗里达州迈阿密肖尔俱乐部权益的部分或全部债务(“贷款”)的某些信息(“信息”)以及任何此类交易(“交易”)@杰托比试过了,但没有成功。明确地说,我试图找到并显示引用的所有内容,即文本中引用的每一个“实例”,但没有返回任何内容。问题是否与引用的文本出现在括号内(“引用的文本”)这一事实有关,如是?你会如何处理括号?以下是完整摘录(谢谢!:)花旗银行(“CBNA”)将在本协议签署之日或之后,向HighArc Capital Management,L.P.(“交易对手”)提供有关可能出售佛罗里达州迈阿密肖尔俱乐部权益的部分或全部债务(“贷款”)的某些信息(“信息”)以及任何此类交易(“交易”)@Geotob