正则

作者: hehehehe | 来源:发表于2020-12-20 16:18 被阅读0次

https://www.cnblogs.com/yjh-bl/p/11096594.html
https://zhuanlan.zhihu.com/p/127807805
https://docs.python.org/zh-cn/3/library/re.html

[] () {}

圆括号()是组,主要应用在限制多选结构的范围/分组/捕获文本/环视/特殊模式处理
    (\s*)表示连续空格的字符串
    (abc|bcd|cde),表示这一段是abc、bcd、cde三者之一,顺序也必须一致
方括号是单个匹配 字符集/排除字符集/命名字符集
    [\s*] 表示空格或者*号
\s{1,3}表示匹配1到3个空格
(0-9)匹配'0-9'本身。[0-9]*匹配数字
p = re.compile(r'[0-9][^x|y]')
re.search(p,'3xt')
new_address = re.sub('(号|弄|栋|幢|号楼|附近)$', '', address)
time_pattern = re.compile(r'[(](.*?)[)]', re.S)
time_h_pattern = re.compile(r'h(\d*)', re.S)
time_m_pattern = re.compile(r'm(\d*)', re.S)

import re
import json

pre = 'recall_data_gd='
suffix = ' where'
re_compile = re.compile(f"{pre}'(.*?)'{suffix}")

if __name__ == '__main__':
    with open("/Users/shilulu/Downloads/update_gz_0.sql", "r") as f:
        with open("/Users/shilulu/Downloads/update_gz_0_0.sql", "w") as f2:
            while True:
                l = f.readline()
                if l:
                    ll = re.findall(re_compile, l)
                    s = ll[0]
                    replaced = s.replace("'", "''")
                    l_replace = re.sub(re_compile, pre + "'" + replaced + "'" + suffix, l)
                    f2.write(l_replace)
                else:
                    break

1.查找一个匹配项

查找并返回一个匹配项(Match)的函数有3个:search、match、fullmatch,他们的区别分别是:
search: 查找任意位置的匹配项
match: 必须从字符串开头匹配
fullmatch: 整个字符串与正则完全匹配

2.查找多个匹配项

现在来看看查找多项,查找多项函数主要有:findall函数 与 finditer函数:
findall: 从字符串任意位置查找,返回一个列表
finditer:从字符串任意位置查找,返回一个迭代器

3.分割

re.split(pattern, string, maxsplit=0, flags=0) 函数:用 pattern 分开 string , maxsplit表示最多进行分割次数, flags表示模式,就是上面我们讲解的常量!

4.替换

re.sub(pattern, repl, string, count=0, flags=0) 函数参数讲解:repl替换掉string中被pattern匹配的字符, count表示最大替换次数,flags表示正则表达式的常量。

值得注意的是:sub函数中的入参:repl替换内容既可以是字符串,也可以是一个函数哦! 如果repl为函数时,只能有一个入参:Match匹配对象。

数量

多字符匹配(表示数量)

*   匹配前一个字符出现0次或者无限次,即可有可无
+   匹配前一个字符出现1次或者无限次,即至少1次
?   匹配前一个字符出现1次或者0次,即至多1次
{m} 匹配前一个字符出现m次
{m,}    匹配前一个字符至少出现m次
{m,n}   匹配前一个字符出现从m到n次

单字符匹配(表示字符)

字符  功能
.   匹配任意1个字符(除了\n)
[]  匹配[]中列举的字符
\d  匹配数字,即0-9
\D  匹配非数字,即不是数字
\s  匹配空白,即空格,tab键 ,\n
\S  匹配非空白
\w  匹配单词字符,即a-z  A-Z  0-9   _
\W  匹配非单词字符


\d == [0-9]
\D == [^0-9]
\w == [a-zA-Z0-9_]
\W == [^a-zA-Z0-9_]

表示边界

字符  功能
^   匹配字符串开头
$   匹配字符串结尾
\b  匹配一个单词的边界
\B  匹配非单词边界
^ 和 $ 是描述整个字符串的边界
\b 和 \B 是描述字符串中的单词边界

正则表达式   规则  可以匹配
^   开头  字符串开头
$   结尾  字符串结束
[ABC]   […]内任意字符    A,B,C
[A-F0-9xy]  指定范围的字符 A,……,F,0,……,9,x,y
[^A-F]  指定范围外的任意字符  非A~F
AB|CD|EF    AB或CD或EF    AB,CD,EF
image.png

非贪婪匹配

public class Main {
    public static void main(String[] args) {
        Pattern pattern = Pattern.compile("(\\d+?)(0*)");
        Matcher matcher = pattern.matcher("1230000");
        if (matcher.matches()) {
            System.out.println("group1=" + matcher.group(1)); // "123"
            System.out.println("group2=" + matcher.group(2)); // "0000"
        }
    }
}
  • 修饰符可以匹配任意个字符,包括0个字符。我们用A\d可以匹配:

A:因为\d可以匹配0个数字;
A0:因为\d
可以匹配1个数字0;
A380:因为\d*可以匹配多个数字380。
修饰符+可以匹配至少一个字符。我们用A\d+可以匹配:

A0:因为\d+可以匹配1个数字0;
A380:因为\d+可以匹配多个数字380。
但它无法匹配"A",因为修饰符+要求至少一个字符。

  • 修饰符?可以匹配0个或一个字符。我们用A\d?可以匹配:

A:因为\d?可以匹配0个数字;
A0:因为\d+可以匹配1个数字0。
但它无法匹配"A33",因为修饰符?超过1个字符就不能匹配了。

  • 如果我们想精确指定n个字符怎么办?用修饰符{n}就可以。A\d{3}可以精确匹配:

A380:因为\d{3}可以匹配3个数字380。

  • 如果我们想指定匹配n~m个字符怎么办?用修饰符{n,m}就可以。A\d{3,5}可以精确匹配:

A380:因为\d{3,5}可以匹配3个数字380;
A3800:因为\d{3,5}可以匹配4个数字3800;
A38000:因为\d{3,5}可以匹配5个数字38000。

  • 如果没有上限,那么修饰符{n,}就可以匹配至少n个字符。

相关文章

  • java正则使用

    正则切割 正则捕获 正则完全匹配

  • regexp 正则包

    正则对象 正则使用都是通过创建对应的正则对象,调用对象方法所实现。 新建正则对象 正则对象属性方法 正则方法 一般...

  • 个人书画作品之四

    写楷心得 字正则心正,心正则人正,人正则德正,德正则身正, 身正则形正,形正则意正, 意正则气正,一气化三清。 ...

  • 第七天正则表达式

    正则表达式的理念: 正则的使用方法: 正则里string两个方法: 使用正则找字母的几种写法: 正则的转义: 正则...

  • 心正笔正

    心正则意正!心正则身正! 心正则言正!心正则行正! 心正则笔正!心正则字正! 心正则并勤!勤尽则字成! 心清则目明...

  • git一次删除多个文件

    正则 非正则

  • day17-正则表达式

    正则表达式符号含义 通配符与正则区别? 正则表达式中注意事项 正则表达式分类: 基本正则(BRE) ※ 扩展正则表...

  • Js正则匹配常用案例

    1 用户名正则 2 密码强度正则 3 整数正则 4 数字正则 5 Email正则 6 手机号码正则 7 身份证号正...

  • 前端表单验证常用的15个JS正则表达式

    1.用户名正则 2 密码强度正则 3 整数正则 4 数字正则 5 Email正则 6 手机号码正则 7 身份证号正...

  • 2019-06-15 JS

    email正则, url正则

网友评论

      本文标题:正则

      本文链接:https://www.haomeiwen.com/subject/jqjknktx.html