正则表达式
正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。
下图提供了正则表达式的简介写法:
1. 通配符 ?与 *
ps: 使用 * 字符代替 ? 字符扩大了找到的文件的数量。
2. ^,+,$与.
例:^[0-9]+abc$就是匹配数字开头,abc结尾的字符串
var str = "123abc"; var patt1 = /^[0-9]+abc$/; document.write(str.match(patt1));
例:
import re key = r"ababbbbcadsdf" p1 = r"ab+" pattern1 = re.compile(p1) print pattern1.findall(key)
输出结果为:
[‘ab‘,‘abbbb‘]
即:按顺序从左往右匹配,+是前面一个字符(b)匹配一次或者多次。
3. 匹配.本身~转义字符:\
\ 这个符号通常用来把特殊的符号转成普通的。
例:
import re key = r"[email protected]" p1 = r"[email protected]\.edu\.cn" pattern1 = re.compile(p1) print pattern1.findall(key)
findall返回的是所有符合要求的元素列表,包括仅有一个元素时,它还是给你返回的列表。
输出结果为:
[‘[email protected]‘]
我们在.的前面加上了转义符\,而是只匹配“.”的意思!
4. *跟在其他符号后面表达可以匹配到它0次或多次
例如:网页内遇到了链接,可能既有http://开头的,又有https://开头的,我们怎么处理?
import re key = r"http://www.nsfbuhwe.com and https://www.auhfisna.com" p1 = r"https*://"#看那个*! pattern1 = re.compile(p1) print pattern1.findall(key)
输出结果为:
[‘http://‘,‘https://‘]
5. []代表匹配里面的字符中的任意一个
例如:
import re key = r"lalala<heLLo>hello</HellO>heiheihei" p1 = r"<[Hh][Ee][Ll][Ll][Oo]>.+?</[Hh][Ee][Ll][Ll][Oo]>" pattern1 = re.compile(p1) print pattern1.findall(key)
输出结果为:
[‘<heLLo>hello</HellO>‘]
6. [^]代表除了内部包含的字符以外都能匹配
例:现在有cat,hat,mat,qat,想要匹配所有的: 则:
import re key = r"mat cat hat qat" p1 = r"[a-z]*at" pattern1 = re.compile(p1) print pattern1.findall(key)
输出结果为:
[‘mat‘,‘cat‘,‘hat‘,‘qat‘]
若上例重要匹配除qat以外的,则:
import re key = r"mat cat hat qat" p1 = r"[^q]at"#这代表除了p以外都匹配 pattern1 = re.compile(p1) print pattern1.findall(key)
输出结果为:
[‘mat‘,‘hat‘]
7. 贪婪模式
例:我想匹配到@后面一直到“.”之间的,在这里是china 即@china.
import re key = r"[email protected]" p1 = r"@.+\." pattern1 = re.compile(p1) print pattern1.findall(key)
但是结果却是这样:
[‘@china.edu.‘]
- 因为正则表达式默认是“贪婪”的,我们之前讲过,“+”代表是字符重复一次或多次。但是我们没有细说这个多次到底是多少次。所以它会尽可能“贪婪”地多给我们匹配字符,在这个例子里也就是匹配到最后一个“.”。
- 那么,怎么才能匹配到想要的结果呢? “?”是也
8. 只要在“+”后面加一个“?”就变成了懒惰模式,匹配尽可能少的。
import re key = r"[email protected]" p1 = r"@.+?\."#我想匹配到@后面一直到“.”之间的,在这里是hit pattern1 = re.compile(p1) print pattern1.findall(key)
此时输出结果为:
[‘@china.‘]
小结
先写到这里,后面在学习中遇到再补充进来。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。