Regex Pandas-Pandas列的正则表达式组中的不同值列表

Regex Pandas-Pandas列的正则表达式组中的不同值列表,regex,python-3.x,pandas,Regex,Python 3.x,Pandas,我有一个熊猫数据框架中所有英文维基百科文章的第一行,我想将括号中提到的语言提取到一个不同的列表中 例如: text A cat (Afrikaans: kat, German: katze) is an animal. This line does not contain anything. A dog (Afrikaans: hond, German: hund, Some language: dog) is an animal. 我想要一个有[南非荷兰语]、[德语]、[一些语言]的列表 还

我有一个熊猫数据框架中所有英文维基百科文章的第一行,我想将括号中提到的语言提取到一个不同的列表中

例如:

text
A cat (Afrikaans: kat, German: katze) is an animal.
This line does not contain anything.
A dog (Afrikaans: hond, German: hund, Some language: dog) is an animal.
我想要一个有[南非荷兰语]、[德语]、[一些语言]的列表

还不确定如何为df.text.str.extractor'\w+:'之类的东西指定支持unicode的正则表达式

有人知道怎么做吗?

以下是我的建议:

将括号中的文本提取为列 从1中的列中提取所有大写单词,分组到列表中 将第2列中的列表展平,并获取差异 下面是:

text = \
["A cat (Afrikaans: kat, German: katze) is an animal.", 
"A dog (Afrikaans: hond, German: hund, Some language: dog) is an animal."]

df = pd.DataFrame(text, columns=['text'])
df['in_parentheses'] = df['text'].str.extract("\(([^)]+)\)")
df['languages'] = df['in_parentheses'].str.extractall("([A-Z]\w+)").groupby(level=0)[0].apply(list)

set(sum(df['languages'], []))
得到:


您需要支持unicode还是只需要输入中列出的输出?你的例子并不清楚。我假设很多语言名称中都有有趣的字符,所以基本上都是在:包括unicode字符和空格之前抓取任何内容。Python3支持unicode,因此你可以显式地列举各种可能性。或者,您可以实现在冒号之前、逗号之后和括号之间抓取任何内容的逻辑。使用regex,您通常必须说类似于re.UNICODE的内容,我是说我不确定如何使用pandas实现这一点。Series.str.extract中的flags参数不起作用吗?
{'Afrikaans', 'German', 'Some'}