Products
GG网络技术分享 2025-03-18 16:15 2
jquey 怎么使用正则表达式? 例:文本框id=a 提交=b 使用<.*? >这个表达式 通过肿么样 不通过又怎么样
jQuery本身没提供有关正则的功能。你需要用JavaScript的正则。jQuery只能获取表单里的字符,然后把字符用JavaScript的正则处理,比如用string的match方法或new 一个RegExp对象对象
jquery就使用选择器吧,比正则表达式更好处理。
跟js一样的,jquery就是js框架而已,
作者:xiaoyu
微信公众号:Python数据科学
当完成了网页html的download之后,下一步当然是从网页中解析我们想要的数据了。那如何解析这些网页呢?Python中有许多种操作简单且高效的工具可以协助我们来解析html或者xml,学会这些工具抓取数据是很容易了。
说到爬虫的html/xml解析(现在网页大部分都是html),可使用的方法实在有很多种,如:
其实也不止这几种,还有很多,那么到底哪一种最好呢?这个很难说,萝卜白菜各有所爱,这些方法各有特色,只能说选择一款你用着顺手的。博主将会陆续给大家介绍这些好用的解析器,但是本篇从正则表达式
开始。
那是不是只要掌握一种就可以了?用不着会那么多吧。确实,熟练掌握一种也可以完成数据的抓取,但随着你解析网页的数量增多,你会发现有时候使用多种方法配合解析网页会更简单,高效,因为这些方法各有特色,不同环境下发挥的作用不一样。因此,建议大家熟练掌握至少两种为佳,这样当你面对复杂结构网页的时候,解析方法会更灵活。
好了,开始我们的解析之旅吧!
正则表达式
(regular expression)简称(regex), 是一种处理字符串的强大工具。它作为一种字符串的匹配模式,用于查看指定字符串是否存在于被查找字符串中,替换指定字符串,或是通过匹配模式查找指定字符串。正则表达式在不同的语言里面,语法也基本是相同的,也就是说学会了一种语言的正则,再学习其它的就很快了。
其主要的匹配过程
是:
好了,让我们看看Python正则表达式的语法
:
别着急,开始都是这样的(当然会的小伙伴可以直接跳过)。下面看几个例子,你马上就学会了。
我们举一个常遇到的一个例子。比如,一个人的邮箱是这样的lixiaomei@qq.com
,那么我们如何从一大堆的字符串把它提取出来呢?
根据正则语法,我们可以这样来定义一个pattern:\\w+@\\w+\\.com
为什么这么定义呢?让我们来看看。
"\\w"
的意思是单词字符[A-Za-z0-9_]
。注意是"+"
匹配前一个字符1次或无限次。那么 "\\w+"
[A-Za-z0-9_]
组合的字符串。"@"
是邮箱的特定字符,所以固定不变。"\\w+"
与前一个是一个道理,匹配一次或无限次的[A-Za-z0-9_]
组合的字符串。" \\. "
的含义是将" . "
转义,因为 " . "
本身也是正则语法中的其中一种,为了真的得到 ".com"
" . "
, 所以在前面加上 "\\"
转义字符。所以,不论是例子中的 lixiaomei@qq.com
,还是其它如xiaoxiao@126.com
之类的邮箱,只要符合规则全都可以匹配,怎么样,简单吧!
问题来了,有的邮箱格式可是xiaoxiao@xxx.xxx.com
这样的!这样的话上面的规则就不能用了。没错,上面的规则比较特殊,只能匹配单一格式的邮箱名。那么怎样设计一个满足以上两种格式的pattern呢?看看这个:\\w+@(\\w+\\.)?\\w+\\.com
这个又是什么意思?
\\w+@
与之前一样(\\w+\\.)?
中的“ ? ”
是匹配0次或1次括号分组内的匹配内容,"()"
则表示被括内容是一个分组,分组序号从pattern字符串起始往后依次排列。分组的概念非常重要,在后面 “匹配对象方法” 章节会着重介绍其如何使用。\\w+\\.com
与之前一样因为是匹配0次或1次,那么就意味着括号内的部分是可有可无的,所以这个pattern就可能匹配两种邮箱格式。
“?”
是0次或1次,那么 \\w+@(\\w+\\.)*\\w+\\.com
模式就更厉害了," * "
可以匹配0次或无限次。
明白了这个之后,相信你应该对正则表达式有一个概念了,但还有很多种语法以及组合方法需要在实践中反复练习。这里只介绍Python中正则表达式比较常见的匹配模式,更多内容可参考《Python核心编程》
一书,关注微信公众号Python网络爬虫
并发送 “学习资料” 便可轻松得到。
上面简单的介绍了正则表达式的pattern
是如何设置的,那么下一步我们就可以开始我们的提取工作了。在Python的re模块
中有几个核心的函数
专门用来进行匹配和查找。
compile(pattern, flag=0)
为什么要对pattern进行编译呢?《Python核心编程》
里面是这样解释的:
使用预编译的代码对象比直接使用字符串要快,因为解释器在执行字符串形式的代码前都必须把字符串编译成代码对象。同样的概念也适用于正则表达式。在模式匹配发生之前,正则表达式模式必须编译成正则表达式对象。由于正则表达式在执行过程中将进行多次比较操作,因此强烈建议使用预编译。而且,既然正则表达式的编译是必需的,那么使用预编译来提升执行性能无疑是明智之举。re.compile()能够提供此功能。
原来是这样啊,由于compile
的使用很简单,所以将在以下几个匹配查找的函数使用方法中体现。
match(pattern, string, flag=0)
最开始
与pattern进行匹配,匹配成功返回匹配对象(只有一个结果),否则返回None。Demand feedback