首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中使用正则表达式返回子字符串

如何在python中使用正则表达式返回子字符串
EN

Stack Overflow用户
提问于 2018-01-26 19:57:33
回答 1查看 82关注 0票数 2

我正在清理一个数据集,我想从Pandas系列中提取一些特性(并删除没有这些特性的行)。

基本上,我想把这个变成:

代码语言:javascript
复制
meter
Author: Stephen Duck Metrical foot type: iambic (-+) Metrical foot number: pentameter (5 feet)  Rhyme scheme: aa  
Author: Marko bulk Metrical foot type: anapaestic (--+) Metrical foot number: trimeter Rhyme scheme: ababcdcd

对此:

代码语言:javascript
复制
foot         feet_number
iambic       pentameter
anapaestic   trimeter

我已经成功地完成了下面的代码,我制作了本系列的一个副本来使用替换函数。

它不是Pythonic的,我相信它也不是熊猫最有效的使用方式。我循环两次找到第一个特性,然后再循环两个循环来找到第二个特性。

这适用于第一个特性(对于具有不同模式的第二个特性也是如此)

代码语言:javascript
复制
pattern1=r'.* Metrical foot type: '
pattern2=r'\( .* \) Metrical foot number: '

dataset['meter']=dataset['meter'].str.replace(pattern1, "")
dataset['meter']=dataset['meter'].str.replace(pattern2, "")

然后循环删除没有这两个特性的行。

有什么办法可以改进吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-26 20:59:27

您可以在以下表达式中使用str.extract()

代码语言:javascript
复制
foot type:\s+(?P<foot>\w+)
.*?
foot number:\s+(?P<feet_number>\w+)

Python

代码语言:javascript
复制
import pandas as pd

df = pd.DataFrame({'meter': ['Author: Stephen Duck Metrical foot type: iambic (-+) Metrical foot number: pentameter (5 feet)  Rhyme scheme: aa', 'Author: Marko bulk Metrical foot type: anapaestic (--+) Metrical foot number: trimeter Rhyme scheme: ababcdcd']})

df[['foot', 'feet_number']] = df['meter'].str.extract(r'foot type:\s+(?P<foot>\w+).*?foot number:\s+(?P<feet_number>\w+)', expand=True)
print(df)

这产生了:

代码语言:javascript
复制
                                               meter        foot feet_number
0  Author: Stephen Duck Metrical foot type: iambi...      iambic  pentameter
1  Author: Marko bulk Metrical foot type: anapaes...  anapaestic    trimeter

a demo for the expression on regex101.com

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

https://stackoverflow.com/questions/48468660

复制
相关文章

相似问题

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