我对正则表达式缺乏经验,需要了解以下内容: 我有一句话:
“重复这些步骤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'格式替换任何数字后跟连字符?
答案 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位