我有以下案例想要捕捉:
| Task| Text | Capture |
|:---- |:------| :-----|
| Capture| 1.304 /XXX 0.0000 XX 15/Oct/2000 | 1.304 and 0.000 |
| Capture | XXX 1.304% - XXXX 15.10.2044 XXX | 1.304 but not part of the date 15.10.2044|
| Capture| XXX 11,8275% XXX1 AAA | 11,8275|
| Capture| XX 0.0. vs. 2.895 | 2.895 |
| Capture| XX 0.0. vs. 2.895. | 2.895 |
我创建了以下正则表达式:
(?<![,\.])(\d+[,.]\d+)[^,\.]%*
与
re.findall(r'(?<![,\.])(\d+[,.]\d+)[^,\.]%*',text)
问题是它无法用
2.895
检测最后两种情况。在一种情况下,它会检测到 2.89
,而在最后一种情况下,它会因为句号而无法检测到。我希望它检测句子末尾的小数,即使句子以句号结尾。
(?<![,\.])\b(\d+[,.]\d+)\b(?![.,]\d)
负向前瞻匹配
.
或 ,
后跟另一个数字。因此,这不会匹配像 15.10.2044
这样的日期,但它会匹配 2.895.
,因为 .
后面没有其他数字。