所有正则表达式中不要留空格,否则会匹配失败。
() 圆括号:括号里的内容作为一组来处理;可以有多个匹配。 eg (com|cn|net)表示匹配com或cn或net。
[] 方括号:括号里的内容单个匹配。eg [^a-zA-Z0-9] 表示匹配所有非字母和数字。
{} 大括号:括号里的内容表示匹配词数。{2}, {2, }, {2, 5}分别表示匹配2次,匹配至少2次,匹配2次到5次。
- 基础元素字符:
\d | 匹配数字 | \D | 匹配任意非数字的字符 | |
\w | 匹配字母或数字或下划线等单词字符等价于“[A-Za-z0-9_] ” | \W | 匹配任意不是字母,数字,下划线的字符,等价于“[^A-Za-z0-9_] | |
\s | 匹配任意的空白符 | \S | 匹配任意不是空白符的字符 | |
. | 匹配除换行符以外的任意字符 | [^aeiou] | 匹配除了aeiou这几个字母以外的任意字符 |
- 位置元素字符:
\b | 匹配单词的开始或结束 | \B | 匹配不是单词开头或结束的位置 | |
^ | 匹配字符串的开始 | |||
$ | 匹配字符串的结束 |
- 匹配次数字符:
? | 重复零次或一次 |
+ | 重复一次或更多次 |
* | 重复零次或更多次 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次 |
- 其他:
转义字符: 使用\来取消这些字符的特殊意义。eg \. \* \\分别表示三个元素本身. * \。
分组:圆括号
或关系:|
- 示例:需要提取文章中最高价格,其中包含最高价格的内容总结如下。
最高价格18.99万元,最高价格也不会超过二十万,最高价格也在不到十七万的价格,最高价格也不过16万元,最高价格约为295751元,最高价格飙到12799元时,因为它刷新了国产混动最高价格,145万的售价(告辞),最高价格的混动2.5L的版本官方售价是27.98万元, 从预售价格来看13万的最高价格。
通过分析得到:
两种句式:最高价格${price}和${price}最高价格;
价格三种表示方法:${小写数字}万、$(大写数字}万、${小写数字}元,
pt_1 = re.compile(r"最高价格\w{0,20}(,|,|.|)\w{0,20}((\d{2,3}(\.\d+|)|(一|二|三|四|五|六|七|八|九|十){2,3})万|\d{5,8}元)")
pt_2 = re.compile(r"((\d{2,3}(\.\d+|)|(一|二|三|四|五|六|七|八|九|十){2,3})万|\d{5,8}元)\w{0,10}最高价格")
所以,待提取文字内容的正则表达式为:
pt=re.compile(r"(最高价格\w{0,20}(,|,|.|)\w{0,20}((\d{2,3}(\.\d+|)|(一|二|三|四|五|六|七|八|九|十){2,3})万|\d{5,8}元)|((\d{2,3}(\.\d+|)|(一|二|三|四|>五|六| 七|八|九|十){2,3})万|\d{5,8}元)\w{0,10}最高价格)")
最终的价格值可用如下表达式:
pt_rst = re.compile(r"((\d{2,3}(\.\d+|)|(一|二|三|四|五|六|七|八|九|十){2,3})万|\d{5,8}元)",flags=re.I)
参考文献: