example:
s = 'Cat and Dog'print(s.find('Dog'),end = ' ')print(s.index('Dog'),end = ' ')print(s.find('duck'),end = ' ')# 输出# 8 8 -1
如果要替换字符串,使用replace()方法就好了。
s = 'Cat and Dog'print(s.replace('cat','Dog'))# 'Dog and Dog'
import fnmatchs = 'fish and mouse'fnmatch.fnmatch(s,'fish*')fnmatch.fnmatch(s,'fish*m?')fnmatch.fnmatch(s,'f*and*m*')# True False True
import res = 'let us go shopping on 2018/5/12'pattern = r'\d+'re.findall(pattern,s)#['2018','5','12']re.search(pattern,s).group()#'2018'
接下来你可能需要用正则表达式去替换某些字符,那么你需要了解re.sub()方法,看例子。
s = 'I want {size}m space.'re.sub(r'\{size\}','100',s)//'I want 100m space.'s = 'let us go shopping on 2018/5/12're.sub('(\d+)/(\d+)/(\d+)', r'\3-\1-\2', s)#'let us go shopping on 2018-5-12'
re.sub()远比你相像的强大的多。在上面的例子里你可以替换类似于{color}这样的模板字符,也可以把正则匹配到的所有分组调换顺序,例如第二个例子一共匹配了3个分组,然后把第3个分组放到最前面 r’\3-\1-\2’,看明白了吗?
s = 'gcy is talking to kk.'name1 = 'Tom'name2 = 'Jerry'pattern = r'(.*)({0})(.*)({1})(.*)'.format(name1, name2)print re.sub(pattern, r'\1\4\3\2\5', s)# kk is talking to gcy.
其实你还可以自定义替换函数,也就是re.sub()的第二个参数。
def change_date(m): from calendar import month_abbr mon_name = month_abbr[int(m.group(1))] return '{} {} {}'.format(m.group(2), mon_name, m.group(3))s = 'let us go shopping on 2018/5/12'pattern = r'(\d+)/(\d+)/(\d+)'print re.sub(pattern, change_date, s)# let us go shopping on 12 may 2018
最后给与完整版的例子:
def match_case(word): def replace(m): text = m.group() if text.isupper(): return word.upper() elif text.islower(): return word.lower() elif text[0].isupper(): return word.capitalize() else: return word return replaces = 'LOVE PYTHON, love python, Love Python'print re.sub('python', match_case('money'), s, flags=re.IGNORECASE)# LOVE MONEY, love money, Love Money
其实正则表达式还有很多玩法,如果你想让正则和通配符混合着用,一点问题都没有,因为fnmatch还有一个translate()的方法,可以让你把通配符无痛转换成正则表达式,你爱怎么玩就怎么玩。
fnmatch.translate('C*and*D*')#'C.*and.*D.*'
联系客服