首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >熊猫使用regex从文本中获取值

熊猫使用regex从文本中获取值
EN

Stack Overflow用户
提问于 2020-09-20 12:08:05
回答 3查看 105关注 0票数 2

我有这样的短信:

代码语言:javascript
运行
复制
text = 'Ronald Mayr: A\nBell Kassulke: B\nJacqueline Rupp: A \nAlexander Zeller: C\nValentina Denk: C \nSimon Loidl: A \nElias Jovanovic: B \nStefanie Weninger: B \nFabian Peer: C \nHakim Botros: B\nEmilie Lorentsen: B\n'

我需要得到所有有":B“值的名字。例如Bell Kassulke,Elias Jovanovic

我在尝试这样的方法

代码语言:javascript
运行
复制
stu = re.findall('\w+.*.: B',text)

但这一张给了我这样的清单:

代码语言:javascript
运行
复制
['Bell Kassulke: B',
 'Simon Loidl: B',
 'Elias Jovanovic: B']

我只需要名字而不是整个名单。我到底能做什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-09-20 12:11:19

您可以使用

代码语言:javascript
运行
复制
^(.*?):\s*B\s*$

regex演示

详细信息

  • ^ -字符串的开始
  • (.*?) -第1组(.findall的实际值):除行中断字符以外的任何零或多个字符尽可能少
  • : -一个冒号
  • \s*B\s* --一个包含零或多个空白空间的B
  • $ -字符串的末尾/

在潘达斯,你可以用

代码语言:javascript
运行
复制
df['Col name here'].str.findall(r'^(.*?):\s*B\s*$').str.join(',')

或者,如果每个值需要一个匹配:

代码语言:javascript
运行
复制
df['Results'] = df['Col name here'].str.extract(r'^(.*?):\s*B\s*$', expand=False)
票数 1
EN

Stack Overflow用户

发布于 2020-09-27 05:54:05

尝尝这个

'(‘’开始捕捉

\w+

匹配任何单词字符(等于a-zA-Z0-9_)

量词-在一次和无限次之间匹配,尽可能多次,按需要回馈(贪婪)

.*

匹配任何字符(行终止符除外)

量词-在零和无限倍之间匹配,尽可能多次,按需要回馈(贪婪)

“)”捕获的结束

*b

匹配字符:B(区分大小写)

代码语言:javascript
运行
复制
pattern='(\w+.*.): B'
re.findall(pattern,grades)
票数 1
EN

Stack Overflow用户

发布于 2020-09-20 12:14:40

您可以在regex之后添加这一行代码:

代码语言:javascript
运行
复制
stu = [s.replace(': B', '') for s in stu]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63978810

复制
相关文章

相似问题

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