正则表达式
-
由表达式(元素)、量词、断言组成
-
组成
元素 含义 . 匹配除换行符以外任意字符 \d 匹配一个数字 \D 匹配一个非数字 \s 匹配任意空白字符 \S 匹配非空白字符 \w 匹配字母、数字、下划线、汉字 \W 匹配 非 \w 字符 \r 、\n 匹配ASCII的回车、换行 量词 含义 [ ] 包含一系列字符 [^ ] 包含之外一系列字符 S{n} 匹配表达式重复n次,相当于{n, n} S{m, } 匹配至少m次 S{, n} 匹配至多n次,相当于S{0, n} S{m, n} 匹配表达式至少m次,至多n次 S? 匹配表达式0次或者1次,相当于S{0, 1} S+ 表达式至少出现1次,相当于{1, } S* 表达式出现任意次,相当于{0, } 断言 含义 ^ 匹配字符串开始 $ 匹配字符串的结束 \b 单词的边界(开始或结尾 ) \B 非单词的边界,当"\b"为false时,它为true ?=S 表达式后面紧跟S才匹配 ?!S 表达式后面没有S才匹配 - 经典实例
- 经典实例
unicode范围 | 类型 |
---|---|
\u4e00-\u9fa5 | 汉字 |
\u0030-\u0039 | 数字 |
\u0041-\u005a | 大写字母 |
\u0061-\u007a | 小写字母 |
\uAC00-\uD7AF | 韩文 |
\u3040-\u31FF | 日文 |
- IP地址
QT使用正则表达式
QRegExp类使用
QString str = "wcx39";
QRegExp re("^(\\D*)(\\d*)$"); //创建正则对象
int pos = re.indexIn(str);
QString a, b;
if(pos > -1)
{
a = re.cap(1);
b = re.cap(2);
qDebug() << a << b; //a == "wcx", b == 39
}
Python使用正则表达式
- 正则表达式表示类型:raw string类型(原生字符串类型)
Re库使用
相关函数调用
-
re.search(pattern, string, flags=0)
在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象 -
re.match(pattern, string, flags=0)
从一个字符串的开始位置起匹配正则表达式,返回match对象 -
re.findall(pattern, string, flags=0)
搜索字符串,以 列表类型 返回全部能匹配的子串 -
re.split(pattern, string, maxsplit=0, flags=0)
将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
参数:maxsplit为最大分割数,剩余部分作为最后一个元素输出 -
re.finditer(pattern, string, flags=0)
搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象 -
re.sub(pattern, repl, string, count=0, flags=0)
在一个字符串中替换所有匹配正则表达式的字串,返回替换后的字符串
参数:repl为替换匹配字符串的字符串, count为匹配的最大替换次数
-
相关参数
pattern:正则表达式的字符串或原生字符串表示
string:待匹配字符串
flags:正则表达式使用时的控制标记
– re.I (re.IGNORECASE):忽略正则表达式的大小写
– re.M (re.MULTILINE):使^操作符将给定字符串的每行作为匹配开始
– re.S (re.DOTALL):使.操作符能匹配包括换行符在内的所有字符 -
注:re库默认采用贪婪匹配,即输出匹配最长的子串;在正则表达式中加 ‘?’ 可获得最短子串
面向对象方式调用
regex = re.compile(pattern, flags=0)
将正则表达式的字符串形式编译成正则表达式对象,再利用对象调用上述函数
match对象
- 属性
- 方法