我想替换
text = '2012-02-23 | My Photo Folder'
与
new_text = '20120223_MyPhotoFolder'
我在这里找到了一个与我的日期格式匹配的正则表达式 http://regexlib.com/RETester.aspx?regexp_id=933
接近这个的最佳方法是什么? 我是否需要正则表达式组,然后在这些组中进行替换?
我假设我可以简单地搜索“|”并用普通的string.replace()替换为“_和” - “with”,但我想找到更通用的解决方案。
提前致谢。
答案 0 :(得分:2)
import re
text = '2012-02-23 | My Photo Folder'
pattern = r'''
(?P<year>\d{4}) # year group consisting of 4 digits
-
(?P<month>\d{2}) # month group consisting of 2 digits
-
(?P<date>\d{2}) # date group consisting of 2 digits
\s\|\s
(?P<name_with_spaces>.*$) # name_with_spaces consuming the rest of the string to the end
'''
compiled = re.compile(pattern, re.VERBOSE)
result = compiled.match(text)
print('{}{}{}_{}'.format(
result.group('year'),
result.group('month'),
result.group('date'),
result.group('name_with_spaces').translate(None,' ')))
输出:
>>>
20120223_MyPhotoFolder
re.VERBOSE
让我们在多行中编写正则表达式,使其更具可读性,并允许注释。
'{}{}{}_{}'.format
只是一个字符串插值方法,它将参数放在{}
指定的位置。
translate
方法适用于result.group('name_with_spaces')
以删除空格。