Skip to content

Commit da8ed9c

Browse files
authored
Merge pull request #70 from Gladysgong/master
regex
2 parents a57db3c + 50fe023 commit da8ed9c

File tree

1 file changed

+143
-3
lines changed

1 file changed

+143
-3
lines changed

README.md

Lines changed: 143 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,15 @@ def get_lines():
294294
for i in f:
295295
yield i
296296
```
297+
个人认为:还是设置下每次返回的行数较好,否则读取次数太多。
298+
```
299+
def get_lines():
300+
l = []
301+
with open('file.txt','rb') as f:
302+
data = f.readlines(60000)
303+
l.append(data)
304+
yield l
305+
```
297306
Pandaaaa906提供的方法
298307
```python
299308
from mmap import mmap
@@ -355,6 +364,7 @@ print(alist)
355364
```python
356365
sorted(d.items(),key=lambda x:x[1])
357366
```
367+
x[0]代表用key进行排序;x[1]代表用value进行排序。
358368
### 6.字典推导式
359369
```python
360370
d = {key:value for (key,value) in iterable}
@@ -443,6 +453,10 @@ c. Python2里面继承object的是新式类,没有写父类的是经典类
443453

444454
d. 经典类目前在Python里基本没有应用
445455

456+
e. 保持class与type的统一对新式类的实例执行a.__class__与type(a)的结果是一致的,对于旧式类来说就不一样了。
457+
458+
f.对于多重继承的属性搜索顺序不一样新式类是采用广度优先搜索,旧式类采用深度优先搜索。
459+
446460
### 16.python中内置的数据结构有几种?
447461
a. 整型 int、 长整型 long、浮点型 float、 复数 complex
448462

@@ -553,14 +567,14 @@ get_files("./",'.pyc')
553567
import os
554568

555569
def pick(obj):
556-
if ob.endswith(".pyc"):
570+
if obj.endswith(".pyc"):
557571
print(obj)
558572

559573
def scan_path(ph):
560574
file_list = os.listdir(ph)
561575
for obj in file_list:
562576
if os.path.isfile(obj):
563-
pick(obj)
577+
pick(obj)
564578
elif os.path.isdir(obj):
565579
scan_path(obj)
566580

@@ -768,6 +782,17 @@ target = 9
768782
nums = solution.twoSum(list,target)
769783
print(nums)
770784
```
785+
786+
```
787+
788+
class Solution(object):
789+
def twoSum(self, nums, target):
790+
for i in range(len(nums)):
791+
num = target - nums[i]
792+
if num in nums[i+1:]:
793+
return [i, nums.index(num,i+1)]
794+
795+
```
771796
给列表中的字典排序:假设有如下list对象,alist=[{"name":"a","age":20},{"name":"b","age":30},{"name":"c","age":25}],将alist中的元素按照age从大到小排序 alist=[{"name":"a","age":20},{"name":"b","age":30},{"name":"c","age":25}]
772797
```python
773798
alist_sort = sorted(alist,key=lambda e: e.__getitem__('age'),reverse=True)
@@ -1580,17 +1605,132 @@ class MyCls(object):
15801605

15811606
## 正则表达式
15821607
### 94.请写出一段代码用正则匹配出ip?
1608+
15831609
### 95.a = “abbbccc”,用正则匹配为abccc,不管有多少b,就出现一次?
1610+
思路:不管有多少个b替换成一个
1611+
1612+
re.sub(r'b+', 'b', a)
15841613
### 96.Python字符串查找和替换?
1585-
### 97.用Python匹配HTML g tag的时候,<.> 和 <.*?> 有什么区别
1614+
a、str.find():正序字符串查找函数
1615+
函数原型:
1616+
str.find(substr [,pos_start [,pos_end ] ] )
1617+
返回str中第一次出现的substr的第一个字母的标号,如果str中没有substr则返回-1,也就是说从左边算起的第一次出现的substr的首字母标号。
1618+
1619+
参数说明:
1620+
str:代表原字符串
1621+
substr:代表要查找的字符串
1622+
pos_start:代表查找的开始位置,默认是从下标0开始查找
1623+
pos_end:代表查找的结束位置
1624+
1625+
例子:
1626+
'aabbcc.find('bb')' # 2
1627+
1628+
b、str.index():正序字符串查找函数
1629+
index()函数类似于find()函数,在Python中也是在字符串中查找子串第一次出现的位置,跟find()不同的是,未找到则抛出异常。
1630+
1631+
函数原型:
1632+
str.index(substr [, pos_start, [ pos_end ] ] )
1633+
1634+
参数说明:
1635+
str:代表原字符串
1636+
substr:代表要查找的字符串
1637+
pos_start:代表查找的开始位置,默认是从下标0开始查找
1638+
pos_end:代表查找的结束位置
1639+
1640+
例子:
1641+
'acdd l1 23'.index(' ') # 4
1642+
1643+
c、str.rfind():倒序字符串查找函数
1644+
1645+
函数原型:
1646+
str.rfind( substr [, pos_start [,pos_ end ] ])
1647+
返回str中最后出现的substr的第一个字母的标号,如果str中没有substr则返回-1,也就是说从右边算起的第一次出现的substr的首字母标号。
1648+
1649+
参数说明:
1650+
str:代表原字符串
1651+
substr:代表要查找的字符串
1652+
pos_start:代表查找的开始位置,默认是从下标0开始查找
1653+
pos_end:代表查找的结束位置
1654+
1655+
例子:
1656+
'adsfddf'.rfind('d') # 5
1657+
1658+
d、str.rindex():倒序字符串查找函数
1659+
rindex()函数类似于rfind()函数,在Python中也是在字符串中倒序查找子串最后一次出现的位置,跟rfind()不同的是,未找到则抛出异常。
1660+
1661+
函数原型:
1662+
str.rindex(substr [, pos_start, [ pos_end ] ] )
1663+
1664+
参数说明:
1665+
str:代表原字符串
1666+
substr:代表要查找的字符串
1667+
pos_start:代表查找的开始位置,默认是从下标0开始查找
1668+
pos_end:代表查找的结束位置
1669+
1670+
例子:
1671+
'adsfddf'.rindex('d') # 5
1672+
1673+
e、使用re模块进行查找和替换:
1674+
函数 | 说明
1675+
---|---
1676+
re.match(pat, s) | 只从字符串s的头开始匹配,比如(‘123’, ‘12345’)匹配上了,而(‘123’,’01234’)就是没有匹配上,没有匹配上返回None,匹配上返回matchobject
1677+
re.search(pat, s) | 从字符串s的任意位置都进行匹配,比如(‘123’,’01234’)就是匹配上了,只要s只能存在符合pat的连续字符串就算匹配上了,没有匹配上返回None,匹配上返回matchobject
1678+
re.sub(pat,newpat,s) | re.sub(pat,newpat,s) 对字符串中s的包含的所有符合pat的连续字符串进行替换,如果newpat为str,那么就是替换为newpat,如果newpat是函数,那么就按照函数返回值替换。sub函数两个有默认值的参数分别是count表示最多只处理前几个匹配的字符串,默认为0表示全部处理;最后一个是flags,默认为0
1679+
1680+
f、使用replace()进行替换:
1681+
基本用法:对象.replace(rgExp,replaceText,max)
1682+
1683+
其中,rgExp和replaceText是必须要有的,max是可选的参数,可以不加。
1684+
rgExp是指正则表达式模式或可用标志的正则表达式对象,也可以是 String 对象或文字;
1685+
replaceText是一个String 对象或字符串文字;
1686+
max是一个数字。
1687+
对于一个对象,在对象的每个rgExp都替换成replaceText,从左到右最多max次。
1688+
1689+
s1='hello world'
1690+
s1.replace('world','liming')
1691+
1692+
### 97.用Python匹配HTML tag的时候,<.*> 和 <.*?> 有什么区别
1693+
第一个代表贪心匹配,第二个代表非贪心;
1694+
?在一般正则表达式里的语法是指的"零次或一次匹配左边的字符或表达式"相当于{0,1}
1695+
而当?后缀于*,+,?,{n},{n,},{n,m}之后,则代表非贪心匹配模式,也就是说,尽可能少的匹配左边的字符或表达式,这里是尽可能少的匹配.(任意字符)
1696+
1697+
所以:第一种写法是,尽可能多的匹配,就是匹配到的字符串尽量长,第二中写法是尽可能少的匹配,就是匹配到的字符串尽量短。
1698+
比如<tag>tag>tag>end,第一个会匹配<tag>tag>tag>,第二个会匹配<tag>。
15861699
### 98.正则表达式贪婪与非贪婪模式的区别?
1700+
贪婪模式:
1701+
定义:正则表达式去匹配时,会尽量多的匹配符合条件的内容
1702+
标识符:+,?,*,{n},{n,},{n,m}
1703+
匹配时,如果遇到上述标识符,代表是贪婪匹配,会尽可能多的去匹配内容
1704+
1705+
非贪婪模式:
1706+
定义:正则表达式去匹配时,会尽量少的匹配符合条件的内容 也就是说,一旦发现匹配符合要求,立马就匹配成功,而不会继续匹配下去(除非有g,开启下一组匹配)
1707+
标识符:+?,??,*?,{n}?,{n,}?,{n,m}?
1708+
可以看到,非贪婪模式的标识符很有规律,就是贪婪模式的标识符后面加上一个?
1709+
1710+
参考文章:https://dailc.github.io/2017/07/06/regularExpressionGreedyAndLazy.html
1711+
15871712
### 99.写出开头匹配字母和下划线,末尾是数字的正则表达式?
1713+
s1='_aai0efe00'
1714+
res=re.findall('^[a-zA-Z_]?[a-zA-Z0-9_]{1,}\d$',s1)
1715+
print(res)
1716+
15881717
### 100.正则表达式操作
15891718
### 101.请匹配出变量A 中的json字符串。
15901719
### 102.怎么过滤评论中的表情?
1720+
思路:主要是匹配表情包的范围,将表情包的范围用空替换掉
1721+
```
1722+
import re
1723+
pattern = re.compile(u'[\uD800-\uDBFF][\uDC00-\uDFFF]')
1724+
pattern.sub('',text)
1725+
1726+
```
15911727
### 103.简述Python里面search和match的区别
1728+
match()函数只检测字符串开头位置是否匹配,匹配成功才会返回结果,否则返回None;
1729+
search()函数会在整个字符串内查找模式匹配,只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。
1730+
15921731
### 104.请写出匹配ip的Python正则表达式
15931732
### 105.Python里match与search的区别?
1733+
见103题
15941734

15951735
## 系统编程
15961736
### 106.进程总结

0 commit comments

Comments
 (0)