Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫使用正则表达式从文本中获取值_Python_Python 3.x_Regex_Pandas_Regex Lookarounds - Fatal编程技术网

Python 熊猫使用正则表达式从文本中获取值

Python 熊猫使用正则表达式从文本中获取值,python,python-3.x,regex,pandas,regex-lookarounds,Python,Python 3.x,Regex,Pandas,Regex Lookarounds,我有这样一个文本: 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' ['Bell Kassulke:

我有这样一个文本:

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'
['Bell Kassulke: B',
 'Simon Loidl: B',
 'Elias Jovanovic: B']
我需要得到所有具有“:B”值的名称。。比如贝尔·卡苏尔克,埃利亚斯·约万诺维奇

我正在尝试这样的事情

stu = re.findall('\w+.*.: B',text)
但这张给我的清单是这样的:

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'
['Bell Kassulke: B',
 'Simon Loidl: B',
 'Elias Jovanovic: B']
我只需要名字,不需要整个名单。我能做什么呢?

你可以使用

^(.*?):\s*B\s*$

详细信息

  • ^
    -字符串的开头
  • (.*)
    -第1组(
    .findall
    的实际值):除换行符以外的任何零个或多个字符,尽可能少
  • -冒号
  • \s*B\s*
    -a
    B
    包含零个或多个空格
  • $
    -字符串结尾/
在熊猫中,你可以使用

df['Col name here'].str.findall(r'^(.*?):\s*B\s*$').str.join(',')
或者,如果每个值需要一个匹配项:

df['Results'] = df['Col name here'].str.extract(r'^(.*?):\s*B\s*$', expand=False)

您可以在正则表达式之后添加这行代码:

stu = [s.replace(': B', '') for s in stu]
试试这个

“(”开始捕获

\w+

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

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

*

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

量词-在零次和无限次之间匹配,尽可能多地匹配,根据需要返回(贪婪)

“)”捕获结束

:B

按字面意思匹配字符:B(区分大小写)

从结果中删除“:B”:stu=str(stu)。替换(':B','')