正则表达式将'1-3'格式替换为'从1到3'格式

时间:2017-03-15 23:30:39

标签: python regex

我对正则表达式缺乏经验,需要了解以下内容: 我有一句话:

  

“重复这些步骤1-3次,阅读第10-12章,然后阅读100-150个俯卧撑”

如何将其替换为:

  

“重复这些步骤1到3次,阅读章节从10到12,接着是100到150次俯卧撑”

所以我试图用来识别'digit-digit'格式的正则表达式如下:

r'\d\D\d'

其中\ d's表示单个数字,\ D表示非数字。 但是这只能识别出“1-3”......我怎样才能获得一个正则表达式,它将从1-1000中取任何数字,然后是连字符? 总体而言,我如何用上面显示的'from to'格式替换任何数字后跟连字符?

2 个答案:

答案 0 :(得分:4)

您可以使用\d+匹配多个数字,此处+表示一个或多个;然后你可以用括号捕获数字模式,使用后退参考以你需要的方式重新格式化模式:

import re
re.sub(r"(\d+)-(\d+)", r"from \1 to \2", "Repeat these steps 1-3 times and read the chapters 10-12 followed by 100-150 push-ups")
# 'Repeat these steps from 1 to 3 times and read the chapters from 10 to 12 followed by from 100 to 150 push-ups'

+更严格的量词可能是{1,4},其匹配由@NolenRoyalty评论的一到四位数字。因此您可以根据需要使用(\d{1,4})-(\d{1,4})

答案 1 :(得分:1)

你必须添加像+这样的量词,这意味着1到*次。 r'\d+\D\d+'

或者@Nolen Royalty建议使用{1,4} r'\d{1,4}\D\d{1,4},因此您只允许1到4位