正则表达式

正则表达式基本用法

牧云@^-^@ 提交于 2020-01-03 15:22:53
说到正则表达式,大家就会想到那像火星文一样的正则表达式字符串。虽然看起来很奇怪,但是一个个都搞清楚那些东西分别表示什么意思的时候,会发现这东西其实也不难。说干就干,我们来一个个的理解。 先弄点数据 string input = "http://www.tansea.cn/23 233【个人博客】23333【http©双子宫殿】"; List<string> pattern = new List<string>(); 先来个最简单的开个味,太深了都没有兴趣往下看了 pattern.Add("http");//常量匹配 result = 2 没有任何的正则表达式的元字符(也就是保留字),http在input里面有2个,所以匹配到了2条 基础篇 一、基本语义描述符 1、\d(数字字符)与\D(非数字字符) pattern.Add("233\\d");//匹配233+数字字符 result=1 pattern.Add("233\\D");//匹配233+非数字字符 result=1 2、\w(字母数字下划线)与\W(非字母数字下划线) pattern.Add("\\w");//匹配字母+数字+下划线 result=36 pattern.Add("\\W");//不匹配字母+数字+下划线 result=11 注意:实测\w是能匹配到中文的 3、\s(空白字符)与\S(非空白字符)

正则表达式 贪婪与非贪婪

喜你入骨 提交于 2020-01-03 10:11:04
贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配, 而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配。 属于贪婪模式的量词,也叫做匹配优先量词,包括: “{m,n}”、“{m,}”、“?”、“*”和“+”。 在匹配优先量词后加上“?”,即变成属于非贪婪模式的量词,也叫做忽略优先量词,包括: “{m,n}?”、“{m,}?”、“??”、“*?”和“+?”。 默认是贪婪模式;在量词后面直接加上一个问号?就是非贪婪模式。 来源: https://www.cnblogs.com/wander-clouds/p/8482022.html

正则表达式之贪婪模式与非贪婪模式

橙三吉。 提交于 2020-01-03 10:10:55
给定一段文本 https://www.example.com/ ---- http://www.sample.com.cn/ ---- 示例文本 要将其中的所有http(s)链接提取出来 先尝试使用正则表达式:https{0,1}://.+/ 会发现得到的结果是https://www.example.com/ ---- http://www.sample.com.cn/ 这是因为正则表达式默认采用了贪婪模式(Greedy,尽可能多的匹配) 也就是说在//之后会尽可能多的进行匹配,直到遇到最后一个/ 为避免这种情况,可采用非贪婪模式(Non-greedy,尽可能少的匹配),在+后添加一个? 即https{0,1}://.+?/ 以Java代码为例: import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegularExpressionDemo { public static void main(String[] args) { String regex = "https{0,1}://.+?/"; String text = "https://www.example.com/ ---- http://www.sample.com.cn/ ---- 示例文本"; Pattern

【】正则表达式示例

拥有回忆 提交于 2020-01-03 07:17:06
package com.chinamobile.epic.common.regex; import com.google.common.base.Strings; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.CollectionUtils; import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; /** */ public class TargetParamRegexMatches { private static final Logger logger = LoggerFactory.getLogger(TargetParamRegexMatches.class); /** * 从 sourceString 中匹配出 params 中的值 * * @param pattern 正则表达式 * @param sourceString

一些常用的正则表达式示例

家住魔仙堡 提交于 2020-01-03 07:16:51
一些常用的正则表达式示例: 1、匹配所有的正数:^[0-9]+$ 2、匹配所有的小数:^\-?[0-9]*\.?[0-9]*$ 3、匹配所有的整数:^\-?[0-9]+$ 4、提取信息中的中文字符串: [\u4e00-\u9fa5]* ; 5、提取信息中的邮件地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 6、提取信息中的中国手机号码:(86)*0*13\d{9} 7、提取信息中的中国固定电话号码:(\(\d{3,4}\)|\d{3,4}-|\s)?\d{8} 8、提取信息中的中国邮政编码:[1-9]{1}(\d+){5} 9、提取信息中的中国身份证号码:\d{18}|\d{15} 10、提取信息中的任何数字:(-?\d*)(\.\d+)? 11、匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/ 12、匹配邮箱:/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/ 来源: https://www.cnblogs.com/houchen/p/10632891.html

Python,正则表达式 - (?:)示例

自闭症网瘾萝莉.ら 提交于 2020-01-03 07:16:38
例如正则表达式a(?:b),匹配后没有包含'b'的分组 >>> string 'ab ac' >>> import re >>> string = 'ab ac' >>> re.search(r'a(?:b)', string).group(0) 'ab' >>> re.search(r'a(?:b)', string).group(1) # group(1)里没有包含'b'这个分组 Traceback (most recent call last): File "<input>", line 1, in <module> re.search(r'a(?:b)', string).group(1) IndexError: no such group >>> 例如正则表达式:a(b),匹配后有包含'b'的分组 >>> import re >>> string = 'ab ac' >>> re.search(r'a(b)', string).group(0) 'ab' >>> re.search(r'a(b)', string).group(1) # group(1)里有包含'b'这个分组 'b' >>> 参考 https://stackoverflow.com/a/10804846/5955399 https://docs.python.org/3/library/re.html

Python网络爬虫与信息提取

妖精的绣舞 提交于 2020-01-03 04:25:13
1.Requests库入门 Requests安装 用管理员身份打开命令提示符: pip install requests 测试:打开IDLE: >>> import requests >>> r = requests.get("http://www.baidu.com") >>> r.status_code 200 >>> r.encoding = 'utf-8' #修改默认编码 >>> r.text #打印网页内容 HTTP协议 超文本传输协议,Hypertext Transfer Protocol. HTTP是一个基于“请求与响应”模式的、无状态的应用层协议。 HTTP协议采用URL作为定位网络资源的标识。 URL格式 http://host[:port][path] host:合法的Internet主机域名或IP地址 port:端口号,缺省端口为80 path:请求资源的路径 操作 方法 说明 GET 请求获取URL位置的资源 HEAD 请求获取URl位置资源的响应消息报告,即获得该资源的头部信息 POST 请求向URL位置的资源后附加新的数据 PUT 请求向URL位置存储一个资源,覆盖原URL位置的资源 PATCH 请求局部更新URL位置的资源,即改变该处资源的部分内容 DELETE 请求删除URL位置存储的资源 Requests主要方法 方法 说明 requests

Forward团队-爬虫豆瓣top250项目-项目进度

北城余情 提交于 2020-01-03 04:13:17
项目地址: https://github.com/xyhcq/top250 我们的项目是爬取豆瓣top250的电影的信息,在做这个项目前,我们都没有经验,完全是从零开始,过程中也遇到了很多困难,不过我们也乐于边学边做。 我们先分析了豆瓣top250的网页源码,发现都是html的代码,我们将我们需要的每组角标对应的信息都记录了下来,用于后续抓取。 top250中每部电影的网页基本都是这种格式: 1 https://movie.douban.com/top250?start= 递归增加的,所以我们后续也用得上 现阶段我们将程序的大体框架构建了出来,在打算进一步写的时候,我们发现,我们需要用到一些新知识:正则表达式以及beautifulsoup,然而悲剧的是,我们都不曾学过,所以组员们在最近都在学习正则表达式,幸运的是,老师最近的课上正好给我们讲了Python的正则表达式re模块的用法,解决了我们的一些问题,我们还需要学习beautifulsoup。 我们的程序框架是这样的: 1 # -*- coding:utf-8 -*- 2 import re 3 from bs4 import BeautifulSoup 4 5 def getHtml(): 6 # 用于获取豆瓣top250网站信息 7 pass 8 9 def getData(): 10 # 解析html,存储获取到的信息 11

Notepad++删除空行的多种实现办法

本小妞迷上赌 提交于 2020-01-03 04:08:27
Notepad++支持基础的正则表达式,同时由于自身丰富的插件和功能,所以删除空行或有空格的空行,有多种实现办法,条条大路通罗马,闪电博客抛砖引玉,供大家参考。 一、删除空行(不包括有空格类符号的空行) 1、\r\n转义符替换 按ctrl+h,跳出搜索替换框,把查找模式定义为扩展(\n,\r…) 查找目标:\r\n\r\n 替换为:\r\n 有编程基础的读者应该知道是什么意思了。 2、Textfx插件 先选中要删部分文本内容,如果是整个文件那就全选Ctrl+A,然后使用Notepad++自带的Textfx插件,在长长的列表中找到Delete Blank Lines,点击即可。 注意Notepad++的正则表达式与转义符等之间不兼容,所以局限性较大,不可以直接用正则表达式替换。 二、删除有空格的空行 1、先删除空格,后删除空行 如何删除只有空格行的空格? 在菜单编辑中找到Blank Operations(行编辑),点击移除行尾空白,再用上面的方法删除空行。 2、使用正则表达式删除空格行空格 替换中查找模式选择正则表达式^ +$,替换为空(就是什么都不填),再用上面的方法删除空行。 来源: https://www.cnblogs.com/feiyuanxing/p/4959330.html

Teleport Ultra/Teleport Pro的冗余代码批量清理方法

旧城冷巷雨未停 提交于 2020-01-03 04:07:51
html原文件中tppabs标记是Teleport Pro软件留下的标记。该软件是离线浏览器,下载完整个网页后,它会在图片或超级链接标签内插入tppabs标签,以记录该图片或超级链接指向的原始地址。因为这个标签不是合法标签,所以普通浏览器会忽略它。但可以通过element.getAttribute("tppabs")在JS中读取这个属性。 如我们手动清除的话,那将是一个无法估计的工作量,需要批量清除。利用DreamWeaver正则表达式批量清除tppabs标签更加容易、快捷。 方法如下: 使用DW替换功能: 查找范围:整个当前本地站点 搜索:源代码 查找:\btppabs="h[^"]*" 替换:(为空) 勾选:使用正则表达式 点替换全部按钮即可 匹配javascript代码: <a href="javascript: if(confirm('http://www.xxx.com \n\n文件并未依 Teleport Pro 取回,因为服务器报告错误导致无法读取。 \n\n你要从服务器上打开它吗?'))window.location='http: //www.xxx.com'" > 方法如下: 查找范围:整个当前本地站点 搜索:源代码 查找:href="javascript:if\(confirm\('htt[^"]*" 替换:href=www.xxx.com 勾选:使用正则表达式