正则表达式python和C++对比
pattern格式(基本通用):
pattern格式
|
符号 |
说明 |
|
^ |
匹配开头 |
|
$ |
匹配结尾 |
|
. |
匹配任意一个字符 |
|
[...] |
匹配任意一个指定的字符 |
|
[^...] |
匹配任意一个非指定的字符 |
|
* |
匹配0个或多个字符前面的字符,没有也算 |
|
+ |
匹配至少一个或多个前面的字符 |
|
{n} |
匹配n个前面的字符,从1开始 |
|
{,n} |
匹配最多n个前面的字符 |
|
{m,} |
匹配至少m个前面的字符 |
|
{m,n} |
匹配至少m最多n个前面的字符 |
|
a|b |
匹配a或b |
|
() |
匹配组 |
|
(?#...) |
注释 |
|
\w |
匹配任意一个字母 |
|
\W |
匹配任意一个非字母 |
|
\d |
匹配任意一个数字 |
|
\D |
匹配任意一个非字符 |
python正则表达式re
re.match(pattern,string) #从开头匹配,group()查看匹配项(组)
re.findall(pattern,string) #匹配全部,返回列表
re.search(pattern,string) #返回类型,可用于判断,要用group调用
re.sub(pattern,repl,string,count) #替换
re.split(pattern,string) #去掉匹配的,把不匹配的分割
实例一(python):
import re
#匹配
str1="z192.168.1.1"
pattern="([0-9]{1,3}\.)([0-9]{1,3}\.)"
result1=re.match(pattern,str1)
if bool(result1):
print("match=",result1.group(0))
else:
print("match fails")
result2=re.search(pattern,str1)
if bool(result2):
print("search=",result2.group(0))
else:
print("search fails")
#替换
str2="asdsasaff"
pattern="a"
fmt="A"
print("replace_all=",re.sub(pattern,fmt,str2,count=0))
print("replace_onlyone=",re.sub(pattern,fmt,str2,count=1))
print("replace_onlytwo",re.sub(pattern,fmt,str2,count=2))
得出:
match fails
search= 192.168.
AsdsAsAff
Asdsasaff
AsdsAsaff
re.compile(pattern)->patternObj
patternObj.match(string,flag)...
C++正则表达式<regex>
类:
basic_regex 包装正则表达式
match_results 包含一系列匹配项
regex_constants 各种类型
函数:
regex_match(string,match_result,regex) 匹配全部,返回布尔
regex_search(string,match_result,regex) 匹配,返回布尔
regex_replace(string,regex,format) 替换所有
regex_replace(string,regex,format,fonly) 只替换一次
完全匹配,返回布尔
basic_regex构造函数
explicit basic_regex(_In_z_ const _Elem *_Ptr, 正则
flag_type _Flags = regex_constants::ECMAScript 匹配模式
)
match_results接受结果:
成员:
match_results::str(size_t) 返回匹配项
match_results::size() 返回匹配项数
匹配常数regex_constants:
|
元素 |
BRE |
ERE |
ECMA |
grep |
egrep |
awk |
|
使用“|”的分支结构 |
+ |
+ |
+ |
+ |
||
|
使用“\n”的分支结构 |
+ |
+ |
||||
|
定位点 |
+ |
+ |
+ |
+ |
+ |
+ |
|
后向引用 |
+ |
+ |
+ |
|||
|
括号表达式 |
+ |
+ |
+ |
+ |
+ |
+ |
|
使用“()”的捕获组 |
+ |
+ |
+ |
+ |
||
|
使用“\(\)”的捕获组 |
+ |
+ |
||||
|
控件转义序列 |
+ |
|||||
|
dsw 字符转义 |
+ |
|||||
|
文件格式转义 |
+ |
+ |
||||
|
十六进制转义序列 |
+ |
|||||
|
标识转义 |
+ |
+ |
+ |
+ |
+ |
+ |
|
否定断言 |
+ |
|||||
|
否定字边界断言 |
+ |
|||||
|
非捕获组 |
+ |
|||||
|
非贪婪重复 |
+ |
|||||
|
八进制转义序列 |
+ |
|||||
|
普通字符 |
+ |
+ |
+ |
+ |
+ |
+ |
|
肯定断言 |
+ |
|||||
|
使用“{}”的重复 |
+ |
+ |
+ |
+ |
||
|
使用“\{\}”的重复 |
+ |
+ |
||||
|
使用“*”的重复 |
+ |
+ |
+ |
+ |
+ |
+ |
|
使用“?”和“+”的重复 |
+ |
+ |
+ |
+ |
||
|
Unicode 转义序列 |
+ |
|||||
|
通配符 |
+ |
+ |
+ |
+ |
+ |
+ |
|
字边界断言 |
+ |
具体参照:https://msdn.microsoft.com/zh-cn/library/bb982727.aspx
实例二(C++):
#include<regex>
#include<string>
#include<iostream> using namespace std; int main()
{
//匹配 一个字符串,一个返回,一个正则
string str1 = "192.168.1.1";
std::regex rx("([0-9]{1,3}\.)+",regex_constants::egrep);
match_results<std::string::const_iterator>mr;
std::cout <<"result="<<std::boolalpha<< regex_search(str1,mr, rx)<<std::endl;
std::cout <<"size="<< mr.size()<<std::endl<<"str_group=" <<mr.str() << std::endl;
//替换
string str("asdsasaff");
regex rx2("a");
string fmt("A");
cout <<"replace_all=" <<regex_replace(str, rx2, fmt) << endl;
cout <<"replace_onlyone="<<regex_replace(str, rx2, fmt, regex_constants::format_first_only) << endl;
return ();
}
得出:
result=true
size=
str_group=192.168..
replace_all=AsdsAsAff
replace_onlyone=Asdsasaff
正则表达式python和C++对比的更多相关文章
- Go/Python/Erlang编程语言对比分析及示例
本文主要是介绍Go,从语言对比分析的角度切入.之所以选择与Python.Erlang对比,是因为做为高级语言,它们语言特性上有较大的相似性,不过最主要的原因是这几个我比较熟悉. Go的很多语言特性借鉴 ...
- C++和python的变量对比
<C++中的this和Python的self对比>基本都是针对函数而言的,从变量的角度看,也有相同之处. C++中,类中定义的变量一般叫做成员变量,或者说是成员属性,它只属于实例对象,只有 ...
- Go/Python/Erlang编程语言对比分析及示例 基于RabbitMQ.Client组件实现RabbitMQ可复用的 ConnectionPool(连接池) 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil 分享基于MemoryCache(内存缓存)的缓存工具类,C# B/S 、C/S项目均可以使用!
Go/Python/Erlang编程语言对比分析及示例 本文主要是介绍Go,从语言对比分析的角度切入.之所以选择与Python.Erlang对比,是因为做为高级语言,它们语言特性上有较大的相似性, ...
- Python、R对比分析
一.Python与R功能对比分析 1.python与R相比速度要快.python可以直接处理上G的数据:R不行,R分析数据时需要先通过数据库把大数据转化为小数据(通过groupby)才能交给R做分析, ...
- python正则表达式 Python Re模块
最近在学python 练习的时候随手写的,方便以后自己参考~如果能对其他同学有所帮助就再好不过了 希望大家指正哦~ 我会随时整理的,先这样~ 正则表达式 1.元字符([ ]),它用来指定一个char ...
- phython正则表达式 Python Re模块
反斜杠问题 与大多数编程语言相同,正则表达式里使用”\”作为转义字符,这就可能造成反斜杠困扰.假如你需要匹配文本中的字符”\”, Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式 ...
- Python 正则表达式 (python网络爬虫)
昨天 2018 年 01 月 31 日,农历腊月十五日.20:00 左右,152 年一遇的月全食.血月.蓝月将今晚呈现空中,虽然没有看到蓝月亮,血月.月全食也是勉强可以了,还是可以想像一下一瓶蓝月亮洗 ...
- django学习系列——python和php对比
python 和 php 我都是使用过,这里不想做一个非常理性的分析,只是根据自己的经验谈一下感想. 在web开发方面,无疑 php 更甚一筹. 从某种角度来说,php 就是专门为 web 定制的语言 ...
- 安装Ubuntu Server18.04(附与CentOS占用体积和Python版本的对比)
这边只演示一下最新系统的安装过程,设置之类的和以前讲的Kali以及CentOS大同小异:https://www.cnblogs.com/dunitian/p/4822808.html#linux 和C ...
随机推荐
- 防止apache下面直接输入目录访问文件
有些项目链接会暴露服务器上面的文件地址,如何访问文件被访问呢 方法一: 在项目入口文件下面新加一个.htaccess文件(apache开启重写模式才会加载这个文件,否则这个文件配置不会生效) 文件中加 ...
- 转:GROUPING SETS、ROLLUP、CUBE
转:http://blog.csdn.net/shangboerds/article/details/5193211 大家对GROUP BY应该比较熟悉,如果你感觉自己并不完全理解GROUP BY,那 ...
- 自动机理论、语言和计算导论 by John E. Hopcroft
计算理论是计算机应用的基础,理论和应用缺一而不可. ---- 目录 ---- C01 自动机 C02 有穷自动机 C03 正则表达式与正则语言 C04 正则语言的性质 C05 上下文无关文法及上下文无 ...
- AppStore 内购验证的方法
AppStore增加了验证内购(In App Purchasement)的方法, 就是苹果提供一个url地址, 开发测试用: https://sandbox.itunes.apple.com/veri ...
- super.onCreate(SavedInstanceState);
super.onCreate(SavedInatanceState)时调用父类的构造方法,SavedInstanceState是保存当前Activity的状态信息. onCreate方法的参数是Bun ...
- Map/Reduce个人实战--生成数据测试集
背景: 在大数据领域, 由于各方面的原因. 有时需要自己来生成测试数据集, 由于测试数据集较大, 因此采用Map/Reduce的方式去生成. 在这小编(mumuxinfei)结合自身的一些实战经历, ...
- [读书笔记]java中的类加载器
以下内容大多来自周志明的<深入理解Java虚拟机>. 类加载器是java的一项创新,也是java流行的重要原因之一,它最初是为了满足java applet的需求而开发出来. 什么是appl ...
- UICollectionView 图片横向滑动居中偏移量的解决
1.在使用UICollectionView 来显示横向滑动图片的时候,cell与cell之间有间隙,每次滑动后cell都会向左偏移,在使用过这两个方法才解决每次向左偏移的部分. 2.使用方法前不要开启 ...
- java实现定时任务的三种方法
/** * 普通thread * 这是最常见的,创建一个thread,然后让它在while循环里一直运行着, * 通过sleep方法来达到定时任务的效果.这样可以快速简单的实现,代码如下: * @au ...
- input file上传文件扩展名限制
方法一(不推荐使用):用jS获获取扩展名进行验证: <script type="text/javascript" charset="utf-8"> ...