我正在尝试仅提取有效的百分比信息,并使用 Python 中的正则表达式从字符串中消除任何不正确的表示形式。该功能应该像这样工作, 对于,
0-100% = TRUE
0.12% = TRUE
23.1245467% = TRUE
9999% = FALSE
8937.2435% = FALSE
7.% = FALSE
我检查了堆栈溢出中的一些解决方案,它们只提取了 0-100%。我尝试了以下解决方案,
('(\s100|[123456789][0-9]|[0-9])(\.\d+)+%')
'(\s100|\s\d{1,2})(\.\d+)+%'
'(\s100|\s\d[0-99])(\.\d+)+%'
所有这些都适用于除 0-99%(给出 FALSE)和 12411.23526%(给出 TRUE)之外的所有其他可能性。空格的原因是我只想提取两位数。
请您参考如下方法:
想通了。问题出在 '(\.\d+)+' 表达式中的 '+' 而它应该是 '(\.\d+)*' 。第一个表达式期望任何两位数的百分比值都具有小数值,而第二个表达式则没有。我的最终版本如下。
'\s(100|(\d{1,2}(\.\d+)*))%'
对于句子开头的百分比值,您可以将 \s 替换为 $。此外,我的问题部分中的版本接受 100 的小数值,这是无效的百分比值。
