pandas 使用正则表达式从文本中获取值
pandas get a value out of text using regex
我有这样的文字:
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
我正在尝试这样的事情
stu = re.findall('\w+.*.: B',text)
但是这个给了我这样的列表:
['Bell Kassulke: B',
'Simon Loidl: B',
'Elias Jovanovic: B']
虽然我只需要名字而不是整个列表。我具体能做什么?
您可以使用
^(.*?):\s*B\s*$
详情
^
- 字符串的开头
(.*?)
- 第 1 组(.findall
的实际值):除换行字符外的任何零个或多个字符尽可能少
:
- 冒号
\s*B\s*
- 包含零个或多个空格的 B
$
- 字符串结尾/
在Pandas中,您可以使用
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(区分大小写)
pattern='(\w+.*.): B'
re.findall(pattern,grades)
我有这样的文字:
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
我正在尝试这样的事情
stu = re.findall('\w+.*.: B',text)
但是这个给了我这样的列表:
['Bell Kassulke: B',
'Simon Loidl: B',
'Elias Jovanovic: B']
虽然我只需要名字而不是整个列表。我具体能做什么?
您可以使用
^(.*?):\s*B\s*$
详情
^
- 字符串的开头(.*?)
- 第 1 组(.findall
的实际值):除换行字符外的任何零个或多个字符尽可能少:
- 冒号\s*B\s*
- 包含零个或多个空格的B
$
- 字符串结尾/
在Pandas中,您可以使用
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(区分大小写)
pattern='(\w+.*.): B'
re.findall(pattern,grades)