using regular expression substitution command to insert leading zeros in front of numbers less than 10 in a string of filenames

旧时模样 提交于 2019-12-07 04:56:58

问题


I am having trouble figuring out how to make this work with substitution command, which is what I have been instructed to do. I am using this text as a variable:

text = 'file1, file2, file10, file20'

I want to search the text and substitute in a zero in front of any numbers less than 10. I thought I could do and if statement depending on whether or not re.match or findall would find only one digit after the text, but I can't seem to execute. Here is my starting code where I am trying to extract the string and digits into groups, and only extract the those file names with only one digit:

import re
text = 'file1, file2, file10, file20'
mtch = re.findall('^([a-z]+)(\d{1})$',text)

but it doesn't work


回答1:


You can use:

re.sub('[a-zA-Z]\d,', lambda x: x.group(0)[0] + '0' + x.group(0)[1:], s)



回答2:


Anchors anchor to the beginning and end of strings (or lines, in multi-line mode). What you're looking for are word boundaries. And of course, you don't need the {1} quantifier.

\b([a-z]+)(\d)\b

(Not sure how you plan to use your captures, so I'll leave those alone.)




回答3:


You can use re.sub with str.zfill:

>>> text = 'file1, file2, file10, file20'
>>> re.sub(r'(\d+)', lambda m : m.group(1).zfill(2), text)
'file01, file02, file10, file20'
#or
>>> re.sub(r'([a-z]+)(\d+)', lambda m : m.group(1)+m.group(2).zfill(2), text)
'file01, file02, file10, file20'



回答4:


You have the start and end anchors applied, so the pattern cannot be fully matched.

Try something like this

text = "file1, file2, file3, file4, file10, file20, file100"
print re.sub("(?<=[a-z])\d(?!\d),?", "0\g<0>", text)

will result in

file01, file02, file03, file04, file10, file20, file100

This should work if you have a list like above or a single element name.

Explanation

(?<=[a-z]) - Checks that the previous characters are letters using look behind

\d - matches a single digit

(?!\d) - Checks that there are no more digits using lookahead

,? - allows for an optional comma in the list

0\g<0> - The pattern matches a single digit, so it trivial to add a zero. The \g<0> is the matched group.



来源:https://stackoverflow.com/questions/18191633/using-regular-expression-substitution-command-to-insert-leading-zeros-in-front-o

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!