正则表达式入门课
涂伟忠
高级研发工程师
24700 人已学习
新⼈⾸单¥59
登录后,你可以任选2讲全文学习
课程目录
已完结/共 18 讲
正则表达式入门课
15
15
1.0x
00:00/00:00
登录|注册

10 | 应用3:如何在语言中用正则让文本处理能力上一个台阶?

Pattern.split
使用g模式
regexp.Split
re.split
Matcher.replaceAll
String.replaceAll
使用g模式
regexp.ReplaceAllString
re.subn
re.sub
Matcher.find
使用g模式
regexp.FindAllStringSubmatch
regexp.FindAllString
re.finditer
re.findall
Pattern.compile
Pattern.matches
使用^和$表示每行的开头和结尾
regexp.MustCompile
re.compile
re.search
re.match
切割文本内容
替换文本内容
提取文本内容
校验文本内容
写一个正则,兼容邮箱中 @ 符号被替换成 # 符号的情况
课后思考
详细脑图
学习了在一些常见的编程语言中,如何正确地使用相应的方法来实现这些功能
正则解决的问题大概可以分成四类
Java
JavaScript
Go
Python
Java
JavaScript
Go
Python
Java
JavaScript
Go
Python
Java
JavaScript
Go
Python
正则解决的问题大概可以分成四类
学会在编程语言中使用正则,可以极大地提高文本的处理能力
现代主流的编程语言几乎都内置了正则模块
课后思考
4. 切割文本内容
3. 替换文本内容
2. 提取文本内容
1. 校验文本内容
总结
如何在语言中用正则让文本处理能力上一个台阶?

该思维导图由 AI 生成,仅供参考

你好,我是伟忠。今天要和你分享的内容是如何在编程语言中使用正则,让文本处理能力上一个台阶。
现代主流的编程语言几乎都内置了正则模块,很少能见到不支持正则的编程语言。学会在编程语言中使用正则,可以极大地提高文本的处理能力。
在进行文本处理时,正则解决的问题大概可以分成四类,分别是校验文本内容、提取文本内容、替换文本内容、切割文本内容。在这一节里,我会从功能分类出发,给你讲解在一些常见的编程语言中,如何正确地实现这些功能。

1. 校验文本内容

我们先来看一下数据验证,通常我们在网页上输入的手机号、邮箱、日期等,都需要校验。校验的特点在于,整个文本的内容要符合正则,比如要求输入 6 位数字的时候,输入 123456abc 就是不符合要求的。
下面我们以验证日期格式年月日为例子来讲解,比如 2020-01-01,我们使用正则\d{4}-\d{2}-\d{2} 来验证。

Python

在 Python 中,正则的包名是 re,验证文本可以使用 re.match 或 re.search 的方法,这两个方法的区别在于,re.match 是从开头匹配的,re.search 是从文本中找子串。下面是详细的解释:
# 测试环境 Python3
>>> import re
>>> re.match(r'\d{4}-\d{2}-\d{2}', '2020-06-01')
<re.Match object; span=(0, 10), match='2020-06-01'>
# 这个输出是匹配到了,范围是从下标0到下标10,匹配结果是2020-06-01
# re.search 输出结果也是类似的
在 Python 中,校验文本是否匹配的正确方式如下所示
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文详细介绍了在不同编程语言中如何利用正则表达式来提高文本处理能力。首先,文章列举了正则表达式在文本处理中的四种常见应用:校验文本内容、提取文本内容、替换文本内容和切割文本内容。然后,针对Python、Go、JavaScript和Java等编程语言,分别介绍了如何使用正则表达式进行文本处理,包括校验、提取、替换和切割文本的具体方法和注意事项。通过本文的总结,读者可以快速了解不同编程语言中如何利用正则表达式来处理文本,从而提高文本处理能力。文章内容详实,适合技术人员学习和参考。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《正则表达式入门课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(9)

  • 最新
  • 精选
  • 134
    "xxx#163.com".replace(/#/,'@')

    作者回复: 赞,这真的是一个特别好的方法。 遇到本文思考题目类似的问题,很多同学可能一上来就想,我要一展身手,想出一个正则,兼容 @ 和 # 两种情况,当然肯定能写出来,也不难。 但提前对文本进行预处理,把杂乱的文本清洗干净,然后再使用正则来提取是一种非常好的思路,通常也是这么做的,比费尽心思想着怎么用正则来兼容各种情况的办法要更好,也更推荐这么做。

    2020-07-06
    2
    19
  • 吕伟
    [a-z,1-9,A-Z]+[#|@][a-z,1-9,A-Z]+.com 一开始是写这样的“\b(\w+)(#|@)(\d+.com)\b” 但是“联系邮箱xxx#163.com”,这样的话就会将中文也混在一起,所以迫于无奈才这样写“[a-z,1-9,A-Z]”

    作者回复: 可以的,中括号里面多个范围不用逗号哈。 也可以考虑看看能不能让 \w 不匹配汉字,比如试试 ASCII模式(如果有的话)

    2020-07-21
    2
  • Robot
    public static void main(String[] args) { Pattern pattern = Pattern.compile("[a-zA-Z0-9]+(?:[.-][a-zA-Z0-9]+)*#[a-zA-Z0-9]+(?:[.-][a-zA-Z0-9]+)*\\" + ".[a-zA-Z]+"); String str = "A spirited debate ensued. sd.xxx#gmail.com You may find it entertaining and educational to " + "follow all the various threads. However, I want to focus on one of Mark’s replies. He tweeted about a" + " blog he had yanleichang-3#vip.163.com written back in 2018. I encourage you to read it. You’ll learn" + " something about testing, static typing, and Haskell. You’ll also learn something about how to debate" + " with good-job#qq.com someone in the future by posting your refutation in the think#163.com"; Matcher matcher = pattern.matcher(str); while (matcher.find()) { System.out.println(matcher.group().replace('#','@')); }

    作者回复: 可以的,其实题目的本意是兼容文本中有 # 和 @ 两种情况

    2020-07-06
  • ifelse
    学习打卡
    2022-11-21归属地:浙江
  • 徐能
    @Test void replace_email_pound_key_with_at_symbol() { final Pattern pattern = Pattern.compile("(\\W+)(\\w+)(@|#)(\\d+.[a-z]+)(\\W+)"); Matcher match = pattern.matcher("例如网页的底部可能是这样的:联系邮箱:xxx#163.com (请把#换成@)"); assertEquals("例如网页的底部可能是这样的:联系邮箱:xxx@163.com (请把#换成@)", match.replaceAll("$1$2@$4$5")); }
    2022-06-06
  • Geek_039a5c
    public static void main(String[] args) { String mail = "xxx#163.com"; final Pattern pattern1 = Pattern.compile("\\b([\\w.%+-]+)[#@]([\\w.-]+\\.[a-zA-Z]{2,6})\\b"); Matcher match1 = pattern1.matcher(mail); System.out.println(match1.replaceAll("$1@$2")); }
    2022-02-13
  • 取悦
    \w+[@#]\w+[.]com 这个对吗
    2021-01-01
    1
  • 小乙哥
    pattern = re.compile(r'(\w+)#(\w+)') email_str = 'xxx#163.com' print(pattern.sub(r'\1@\2', email_str))
    2020-08-27
  • Juntíng
    JavaScriipt: let str = 'xxx#163.com'; 方式1: str.replace(/#/, '@'); 方式2: str.replace(/(\w+)[#@](.\w+)/g, '$1@$2'); 'xxx&163.com,xxx#qq.com'.replace(/(\w+)[#@&](.\w+)/g, '$1@$2');
    2020-08-07
收起评论
显示
设置
留言
9
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部