10 | 应用3:如何在语言中用正则让文本处理能力上一个台阶?
涂伟忠
该思维导图由 AI 生成,仅供参考
你好,我是伟忠。今天要和你分享的内容是如何在编程语言中使用正则,让文本处理能力上一个台阶。
现代主流的编程语言几乎都内置了正则模块,很少能见到不支持正则的编程语言。学会在编程语言中使用正则,可以极大地提高文本的处理能力。
在进行文本处理时,正则解决的问题大概可以分成四类,分别是校验文本内容、提取文本内容、替换文本内容、切割文本内容。在这一节里,我会从功能分类出发,给你讲解在一些常见的编程语言中,如何正确地实现这些功能。
1. 校验文本内容
我们先来看一下数据验证,通常我们在网页上输入的手机号、邮箱、日期等,都需要校验。校验的特点在于,整个文本的内容要符合正则,比如要求输入 6 位数字的时候,输入 123456abc 就是不符合要求的。
下面我们以验证日期格式年月日为例子来讲解,比如 2020-01-01,我们使用正则\d{4}-\d{2}-\d{2} 来验证。
Python
在 Python 中,正则的包名是 re,验证文本可以使用 re.match 或 re.search 的方法,这两个方法的区别在于,re.match 是从开头匹配的,re.search 是从文本中找子串。下面是详细的解释:
在 Python 中,校验文本是否匹配的正确方式如下所示:
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文详细介绍了在不同编程语言中如何利用正则表达式来提高文本处理能力。首先,文章列举了正则表达式在文本处理中的四种常见应用:校验文本内容、提取文本内容、替换文本内容和切割文本内容。然后,针对Python、Go、JavaScript和Java等编程语言,分别介绍了如何使用正则表达式进行文本处理,包括校验、提取、替换和切割文本的具体方法和注意事项。通过本文的总结,读者可以快速了解不同编程语言中如何利用正则表达式来处理文本,从而提高文本处理能力。文章内容详实,适合技术人员学习和参考。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《正则表达式入门课》,新⼈⾸单¥59
《正则表达式入门课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(9)
- 最新
- 精选
- 134"xxx#163.com".replace(/#/,'@')
作者回复: 赞,这真的是一个特别好的方法。 遇到本文思考题目类似的问题,很多同学可能一上来就想,我要一展身手,想出一个正则,兼容 @ 和 # 两种情况,当然肯定能写出来,也不难。 但提前对文本进行预处理,把杂乱的文本清洗干净,然后再使用正则来提取是一种非常好的思路,通常也是这么做的,比费尽心思想着怎么用正则来兼容各种情况的办法要更好,也更推荐这么做。
2020-07-06219 - 吕伟[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-212 - Robotpublic 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_039a5cpublic 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-011
- 小乙哥pattern = re.compile(r'(\w+)#(\w+)') email_str = 'xxx#163.com' print(pattern.sub(r'\1@\2', email_str))2020-08-27
- JuntíngJavaScriipt: 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
收起评论