首页 > 解决方案 > 使正则表达式不贪婪

问题描述

我有一列字符串:

“19.8983.00”、“19.8984.00”、“19.8985.00”、“19.8986.00”、“19.8989.00”、“19.8990.00”、“19.8991.00”、“19.8992.00”、“19.8993” .00'、'19.8994.00'、'21.0515.00'、'21.0520.00'、'21.0521.00'、'21.0523.00'、'21.0530.00'、'21.0531.00'、'21.0532.00' '、'21.0533.00'、'21.0534.00'、'21.0535.00'

我想删除“19”。从字符串的开头,字符串开头的“.21”和字符串结尾的“.00”。

我用正则表达式试过这个

问题是以下字符串:

“19.1400.00”、“19.1702.00”、“19.2113.00”、“19.2123.00”、“19.2130.00”、“19.2141.00”、“19.2152.00”、“19.2154.00”、“19.2301” .00', '19.2302.00',

被转换为:

'1400'、'1702'、'3'、'0'、'1'、'2'、'4'、'2301'、'2302'、

我的正则表达式很接近,但并不完全正确(例如19.2154.00以某种方式转换为4)。如何使我的正则表达式正确且非贪婪,以便它仅适用于第一场比赛(以及最后一场比赛.00)?

标签: pythonregex

解决方案


使用str.replace涵盖所有三个替换条件的单个正则表达式替换:

composition['compound_code'] = composition['compound_code'].str.replace(r'^(?:19|21)\.|\.00$', '')

推荐阅读