在特定单词和右括号之间打印文本

Printing text between a specific word and a closing paranthesis

我有一个文本文档,我想根据上下文从中提取特定的名称。例如,文档中的一个句子的一部分是这样的——“……采访受害者#1(!ARIEL B. JOHNSON)……”。我只想打印括号之间的名称,但也希望使用 "VICTIM #1" 搜索上下文。

我试过下面的代码。 doc['sentence'] 是数据框列,文档的所有句子都存储为行。

SearchStr = 'VICTIM \#1 (.*?\))'

victim = re.search(SearchStr, str(doc['sentence']))

if victim:
    print(victim.groups())
print(victim)

应该打印'ARIEL B. JOHNSON'

match = re.search(r"VICTIM #[0-9]+ \(.*?\)",STRING)

returns

'VICTIM #1 (!ARIEL B. JOHNSON)'

如果需要,您可以将其拆分为受害者#s 和姓名的字典?如果有帮助?

name = re.sub(r'VICTIM #[0-9]+\s+|!*\(*\)*','',match.group())
num = re.search('[0-9]+',match.group()).group()

v = {num,name}

这可以适用于任何受害者#或姓名

将其应用于 df 中的每一行,将其用作函数,然后将其应用于列:

def victim(STRING):
    match = re.search(r"VICTIM #[0-9]+ \(.*?\)",STRING)
    name = re.sub(r'VICTIM #[0-9]+\s+|!*\(*\)*','',match.group())
    num = re.search('[0-9]+',match.group()).group()
    v.update({num:name})

doc['sentence'].apply(victim)

这给了你一个包含所有受害者的命令#s/names