获取文本和正则表达式python的一种方法

2024-03-29 14:39:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下字符串:

Bbc (57%); Grameen (54%); Cninsure (66%) Mn-Public-Radio-Intl

我想获得:

[BBC World Service, 57], [Grameen Bank, 54], [Cninsure Inc., 66], [Mn-Public-Radio-Intl, np.nan]

我在用这个模式.+?(?=\() 但这是不够的,因为Mn-Public-Radio-Intl没有偏执。 谢谢你的帮助


Tags: 字符串worldservicenppublicnanbbcinc
1条回答
网友
1楼 · 发布于 2024-03-29 14:39:41

使括号可选;您将得到一个空字符串:

re.findall(r'(\b[\w -]+\b)(?:\s+\((\d+)%\))?', inputtext)

演示:

>>> re.findall(r'(\b[\w -]+\b)(?:\s+\((\d+)%\))?', inputtext)
[('Bbc', '57'), ('Grameen', '54'), ('Cninsure', '66'), ('Mn-Public-Radio-Intl', '')]

要获取整数或float('nan'),可以对其进行后处理:

import numpy as np

[(name, int(perc) if perc else np.nan)
 for name, perc in re.findall(r'(\b[\w -]+\b)(?:\s+\((\d+)%\))?', inputtext)]

然后给出:

>>> [(name, int(perc) if perc else np.nan)
...  for name, perc in re.findall(r'(\b[\w -]+\b)(?:\s+\((\d+)%\))?', inputtext)]
[('Bbc', 57), ('Grameen', 54), ('Cninsure', 66), ('Mn-Public-Radio-Intl', nan)]

相关问题 更多 >