本文共 1174 字,大约阅读时间需要 3 分钟。
正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
应用:搜索引擎的核心原理就是利用正则表达式匹配搜索结果;网页爬虫‘r’:在以’r’为前缀的字符串字面值中,反斜杠不会以任何特殊的方式处理。所以r"\n"是一个包含’'和’n’两个字符的字符串,而"\n"是包含一个换行符的单字符字符串。
‘.‘ :字符在正则表达式代表着可以代表任何一个字符(包括它本身)
‘+’的作用是将前面一个字符或一个子表达式重复一遍或者多遍。
‘. +’ : 将.号重复一遍或者多遍,‘.’号可表示任一字符,因此合起来是代表任意长字符串。比方说表达式“ab+”那么它能匹配到“abbbbb”,但是不能匹配到"a",它要求你必须得有个b,多了不限,少了不行。你如果问我有没有那种“有没有都行,有多少都行的表达方式”,回答是有的。
‘*’:将前面一个字符或一个子表达式重复0次或多次
比方说我们在王叶内遇到了链接,可能既有http://开头的,又有https://开头的import rekey = r"http://www.nsfbuhwe.com and https://www.auhfisna.com"#胡编乱造的网址,别在意p1 = r"https*://"#看那个星号!pattern1 = re.compile(p1)print pattern1.findall(key)
[]:代表匹配里面的字符中的任意一个
[^]代表除了内部包含的字符以外都能匹配 “?”将贪婪的“+”改成懒惰的“+”,例如,import rekey = r"chuxiuhong@hit.edu.cn"p1 = r"@.+\."#我想匹配到@后面一直到“.”之间的,在这里是hitpattern1 = re.compile(p1)print pattern1.findall(key)
输出结果
['@hit.edu.']
呦呵!你咋能多了呢?我理想的结果是@hit.,你咋还给我加量了呢?这是因为正则表达式默认是“贪婪”的,我们之前讲过,“+”代表是字符重复一次或多次。但是我们没有细说这个多次到底是多少次。所以它会尽可能“贪婪”地多给我们匹配字符,在这个例子里也就是匹配到最后一个“.”。
我们怎么解决这种问题呢?只要在“+”后面加一个“?”就好了。import rekey = r"chuxiuhong@hit.edu.cn"p1 = r"@.+?\."#我想匹配到@后面一直到“.”之间的,在这里是hitpattern1 = re.compile(p1)print pattern1.findall(key)
输出结果
['@hit.']
加了一个“?”我们就将贪婪的“+”改成了懒惰的“+”。
{a,b}(代表a<=匹配次数<=b)
参考资料:
通配符详解:转载地址:http://izegi.baihongyu.com/