本篇内容介绍了“python正则表达式的技巧有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
峨眉山网站制作公司哪家好,找成都创新互联!从网页设计、网站建设、微信开发、APP开发、响应式网站建设等网站项目制作,到程序开发,运营维护。成都创新互联公司2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联。
格式:
量词?
注:量词有{n,m}、?、+、*
用处:
在字符串中查找符合正则表达式规则的最短子字符串。
案例:
现有字符串num = ”10-3*(20-10+(-10/5)27/3/3-(-100)/(10-35))",要提取括号中的内容。
import re num = '10-3*(20-10+(-10/5)*27/3/3-(-100)/(10-3*5))+(-5*-6)'num2 = re.findall('\(.+?\)', num)num3 = re.findall('\(.+\)', num)print(num2)print(num3)out:['(20-10+(-10/5)', '(-100)', '(10-3*5)']['(20-10+(-10/5)*27/3/3-(-100)/(10-3*5))']
上述代码中num2使用了最小匹配,而num3使用了默认的最大匹配。
请注意num2的正则表达式:
.表示匹配除了换行符之外的所有字符
+表示一个或多个
?表示最小匹配,匹配后面第一个)即返回结果。若没有这个?会匹配到最后一个)才返回结果。
格式:
(\w)
注:在正则表达式中一对括号包围的内容表示分组,正则表达式中可以有多个分组
用处:
匹配字符串,只提取分组中的内容,非分组的内容舍弃不提取。
案例:
str1 = ''' python javajavascript '''result1 = re.findall('<\w+>(\w+)<\w+>',str1)print(result1)result2 = re.findall('<(\w+)>\w+<\w+>',str1)print(result2)out:['python', 'java', 'javascript']['a', 'b', 'c']
从result1和result2提取内容的不同可以看到分组的妙用,分组能指定提取符合正则表达式某一段的内容。
格式:
(?:正则表达式)
注:在括号内以?:开头的分组,匹配到的内容会被隐藏。
另:分组隐藏和分组命名不能同时使用。
用处:
当有用数据和无用数据混在一起时,只能先全取出来,然后对无用数据做分组隐藏,把有用的数据对应的正则表达式用()包起来,这样即可提取出有用数据。
案例:
result1 = re.findall('1(\d)(\d)','167189')print(result1)result2 = re.findall('1(?:\d)(\d)','167189')print(result2)out:[('6', '7'), ('8', '9')]['7', '9']
格式:
(?P<名字>正则表达式)
注:?P<名称>,英文书名号内是分组的名称。
用处:
分组命名在有很多段分组时对不同的分组命名,便于使用,防止混淆。
案例:
str1 = 'study python every day 'ret = re.search('<(?P\w+)>(?P .*?)(?P=tag)>',str1)print(ret)print(ret.group('tag'))print(ret.group('name'))out:tag study python every day
上述案例是一个简单的示范,只有2个分组。但实际爬虫的时候经常会遇到多达10个以上的分组。在分组数量多的时候很容易混淆数据,若使用分组命名会非常方便,根据名字读取对应的数据,提高了代码可读性。
“python正则表达式的技巧有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!