python入门基础学习

学会了能让1小时的工作变成3分钟

2018-07-23  本文已影响29人  编程新视野

一、设计一个正则来过滤一个字符串序列中的10到59

1.首先我们想到最简单的是patt=r"10|11|12|13...59",但是这样太复杂了,能不能简单一点呢~~有办法的,我们来分解一下:

作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要这是一个我的python交流群:831524055,不管你是小白还是大牛欢迎入驻 ,讨论技术, 大家一起交流学习成长!
首先这个数字是2位数

数字的都是十几,二十几,三十几,四十几,五十几,所以第一位数在1到5之间,第二位数在0到9之间

那么改成patt=r"[1-5][0-9]"

import re
patt=r'[1-5][0-9]'
match=re.findall(patt,'10,20,30,40,2,3,59,60')
if match:
print match

['10', '20', '30', '40', '59']

也许有同学不服气,说有啥了不起的,我用推导列表也可以搞定,是的这个你可以写成如下:

str1='10,20,30,40,2,3,59,60'
print [x for x in str1.split(',')
if int(x)>=10 and int(x)<=59]

['10', '20', '30', '40', '59']

1.1.好,我们来改动一下,若把字符串改成下面这样:

str1='xy,10,20,30,40,62,3,59,1w'

你这个时候再用列表推导就很难处理了,又有字符,又有数字,又有字符混合数字,怎么办

写代码要好多if/else,这是时候该正则表达式威猛帅哥出场啦,为啥题目说1个小时的事3分钟搞定有道理的,接着看

import re
str1='xy,10,20,30,40,62,3,59,1w'
patt=r'[1-5][0-9]'
match=re.findall(patt,'str1')
if match:
print match

['10', '20', '30', '40', '59']
看是不是很简便

2

过滤字符串中的只含2个字符的字母,并且第一个字母是大写A或B或C
有了上面的思路,可以顺藤摸瓜,好我们来分析一下

1).字母我们用[a-zA-Z]来表示,只含2个字母,那就[a-zA-Z][a-zA-Z]

2).第一个字母必须是大写的A或B或C,那就[ABC][a-zA-Z]

import re
patt=r'[A-C][a-zA-Z]'
match=re.findall(patt,'xy,1,2,3,4,Ab,w1,Cz')
if match:
print match

['Ab', 'Cz']

这招在过滤邮件里面经常用到,若不用正则表达式,启用其他的方法,则很麻烦,虽然也能解决,但是不方便

3

过滤一个字符串中的含3个字母的独立字符
比如这样的一个字符串'xy,1,2,?,123@sohu,Ab,w1,Cz,xyh,abc',我们怎么办,分析一下吧:

1).首先要设计出匹配字母并且是3个字母,我们很容易想到patt=r'[a-zA-Z][a-zA-Z][a-zA-Z]'或者patt=r'[a-zA-Z]{3}'

import re
patt=r'[a-zA-Z]{3}'
match=re.findall(patt,'xyhh,a,1,2,?,123@sohu,Ab,w1,Cz,xyh,abc')
if match:
print match

['xyh', 'soh', 'xyh', 'abc']

2).继续分析

上面的解决方案虽然解决了一部分的问题,但是很明显结果不完全正确,因为"xyhh","123@sohu"这样的字符组是我们不想要的

我们真正想要的是'xyh'和'abc',怎么办呢...我们可以这样改:patt=r'\b[a-zA-Z]{3}\b'

我们加上了"\b"表示匹配单词的边界,这样3个字母就是独立的字符组

import re
patt=r'\b[a-zA-Z]{3}\b'
match=re.findall(patt,'xyhh,a,1,2,?,123@sohu,Ab,w1,Cz,xyh,abc')
if match:
print match

['xyh', 'abc']

4
过滤一个字符串中的含3个字母的字符,并且最后一个字母是z
跟上面类似,大家思考一下应该很快有答案,有同学说是不是这样就可以了

import re
patt=r'[a-zA-Z][a-zA-Z][z]+'
match=re.findall(patt,'xy,1,2,3,4,Ab,w1,Cz,xyh,xyz,xyzz')
if match:
print match

['xyz', 'xyzz']
不对啊,怎么把'xyzz'弄进来来,大家思考一下为啥'+'不行,或者换成'*'行不行,欢迎留言讨论

正确的应该加'\b'来框定单词边界

import re
patt=r'\b[a-zA-Z][a-zA-Z][z]\b'
match=re.findall(patt,'xy,1,2,3,4,Ab,w1,Cz,xyh,xyz,xyzz')
if match:
print match

['xyz']

二. 匹配12小时制时间

首先先说下12小时制的时间.
12小时制的 12:50PM 对应 24小时制的12:50
12小时制的 12:50AM 对应 24小时制的 00:50

time.time() 方法是获取当前时间时间戳(以秒为单位的浮点数)

a1 = time.time()
print(a1)

1530705274.864062

time.localtime("时间戳") 方法是将时间戳转换为当地的时间, 不过不易读,想要更易读,使用time.asctime()方法转换一下

a2 = time.localtime(a1)
print(a2)

time.struct_time(tm_year=2018, tm_mon=7, tm_mday=4, tm_hour=19, tm_min=54, tm_sec=34, tm_wday=2, tm_yday=185, tm_isdst=0)

time.asctime() 方法将元祖格式的时间转换为更易读的方式

a3 = time.asctime(a2)
print(a3)

Wed Jul 4 19:59:43 2018

time.mktime() 将本地时间格式的元祖转换为时间戳

a7 = time.mktime(a2)
print(a7) # 输出时间戳

下面是经常会用到的转换
time.strftime()

time.strftime("你将要转换成的目标格式","你想要转换的原时间的本地时间形式或者是前面格式对应的元祖")

如果你要传元祖,元祖需要9个int类型的参数,9个参数分别对应本地时间格式的9个参数

strf_style = "%Y-%m-%d %H:%M:%S"
a4 = time.strftime(strf_style,time.localtime(time.time()))
print(a4)

2018-07-04 20:11:16
a5 = time.strftime(strf_style,(2017,5,21,13,14,0,0,0,0))
print(a5)
2017-05-21 13:14:00

time.strptime() 将你提供时间按照你提供的格式解析为本地时间(time.struct_time(9个参数的元祖))

与strftime正好相反,格式如下: 参数顺序与strftime不一样,要注意
time.strptime("你想要转换的时间数据","原数据对应的格式即第一个参数的格式")

a6 = time.strptime(a5,strf_style)
print(a6)

文章有参考https://www.jianshu.com/p/6ddf6f40f03chttps://www.jianshu.com/p/9af83e147527

仿微信聊天时间 根据用户12小时制还是24小时制区分显示上午和下午

微信聊天时间处理 处理12小时制 还是24小时制

@param timeStr 选择器传入的要处理的时间 格式:2018-12-12 12:12

@return 处理好的时间

-(NSString*)addTime:(NSString*)timeStr

{



    NSString *formatStringForHours = [NSDateFormatter dateFormatFromTemplate:@"j" options:0 locale:[NSLocale currentLocale]];

NSRangecontainsA = [formatStringForHoursrangeOfString:@"a"];

   BOOLhasAMPM = containsA.location!=NSNotFound;

   // NSLog(@"是否是12小时制--%d",hasAMPM);
  //hasAMPM==TURE为12小时制,否则为24小时制

 // 日期格式化类

    NSDateFormatter *fmt = [[NSDateFormatter alloc] init];

  // 设置日期格式(y:年,M:月,d:日,H:时,m:分,s:秒)

    fmt.dateFormat = @"yyyy-MM-dd HH:mm";
//    fmt.AMSymbol = @"上午";

//    fmt.PMSymbol = @"下午";

//    fmt.dateFormat = @"yyyy-MM-dd aaa";
// [yyyy-mm-dd] [hh:mm]

    NSArray*dateArr = [timeStrcomponentsSeparatedByString:@" "];

    //[yyyy,mm,dd]
NSArray *preDateArr = [[dateArr firstObject] componentsSeparatedByString:@"-"];

    NSString*preDateStr;

    NSString*dateStr;

    if(preDateArr.count==3) {

        preDateStr = [NSStringstringWithFormat:@"%@年%@月%@日",

                      preDateArr[0],preDateArr[1],preDateArr[2]];

        dateStr = [NSStringstringWithFormat:@"%@月%@",

                   preDateArr[1],preDateArr[2]];

    }



    // 帖子的创建时间

    NSDate*create = [fmtdateFromString:timeStr];



    if(create.isThisYear) {// 今年

        if(create.isToday) {// 今天

            if(hasAMPM) {  //

                fmt.AMSymbol=@"上午";

                fmt.PMSymbol=@"下午";

                fmt.dateFormat=@"aaahh:mm";

            }else{

                fmt.dateFormat=@"HH:mm";

            }



            return[fmtstringFromDate:create];



        }elseif(create.isYesterday) {// 昨天

            if(hasAMPM) {

                fmt.AMSymbol=@"上午";

                fmt.PMSymbol=@"下午";

                fmt.dateFormat=@"昨天 aaahh:mm";

            }else{

                 fmt.dateFormat=@"昨天 HH:mm";

            }



            return[fmtstringFromDate:create];

        }else{// 其他

            if(hasAMPM) {

                fmt.AMSymbol=@"上午";

                fmt.PMSymbol=@"下午";

                fmt.dateFormat= [NSStringstringWithFormat:@"%@ aaahh:mm ",dateStr];

            }else{

               fmt.dateFormat= [NSStringstringWithFormat:@"%@ HH:mm",dateStr];

            }

            return[fmtstringFromDate:create];

        }

    }else{// 非今年

        if(hasAMPM) {

            fmt.AMSymbol=@"上午";

            fmt.PMSymbol=@"下午";

            fmt.dateFormat= [NSStringstringWithFormat:@"%@ aaahh:mm ",preDateStr];

        }else{



           fmt.dateFormat= [NSStringstringWithFormat:@"%@ HH:mm",preDateStr];

        }

        return[fmtstringFromDate:create];

    }

}

文章有参考https://www.jianshu.com/p/6ddf6f40f03chttps://www.jianshu.com/p/9af83e147527https://www.jianshu.com/p/a363817dd842

写有不足的地方或者侵犯,可以联系小编更改QQ:893687544。请各位大佬多多指教!!! 加我的python交流群:831524055分享以下资料给您

上一篇下一篇

猜你喜欢

热点阅读