网站首页 > java教程 正文
正则表达式在文本匹配、模式匹配、数据清洗、表单验证、日志分析等场景下有着广泛的应用,不管你是开发人员、测试人员,或者其他任何行业从业者,只要你有处理文档的需求,掌握一点正则表达式可能会让你的工作效率大大提升。
.默认不匹配换行符
今天使用python语言来介绍一个非常简单的例子,下面这个例子搜索这样的模式,从hello起始,中间可以是任何字符,之后匹配world。r"hello.*world"中的逗点.表示匹配任意字符,*号表示匹配零次或者更多次。
import re
string = "hello world"
result = re.search(r"hello.*world", string)
print(result.group())
运行上面的脚本结果如下,string字符中搜索到了预期的模式。
>>> import re
>>> string = "hello world"
>>> result = re.search(r"hello.*world", string)
>>> print(result.group())
hello world
接着我们把string从单行改为跨行,脚本其他部分不变
import re
string = """hello
world"""
result = re.search(r"hello.*world", string)
print(result.group())
再次运行脚本报错,这是因为没有搜索到预期的模式导致result为None引起的,从这个结果我们可以判断出逗点.*显然没有匹配跨行的情况。
>>> import re
>>> string = """hello
...
... world"""
>>> result = re.search(r"hello.*world", string)
>>> print(result.group())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
进一步查询正则表达式的匹配字符规则也可以发现确实如此。
re.DOTALL
我们也可以参考上图给出的方案使用(.|\r|\n)*的方式匹配任意字符包括换行符,但是python还有更方便的处理方法,就是配置re.DOTALL可选模式。
在re.search中增加re.DOTALL选项
import re
string = """hello
world"""
result = re.search(r"hello.*world", string, re.DOTALL)
print(result.group())
再次运行有成功搜索到了预期的模式,可以匹配跨行的情况了。
>>> import re
>>> string = """hello
...
... world"""
>>> result = re.search(r"hello.*world", string, re.DOTALL)
>>> print(result.group())
hello
world
参考文献
[1]. https://docs.python.org/zh-cn/3/howto/regex.html#matching-characters
[2]. https://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F
猜你喜欢
- 2024-11-16 String.replaceAll方法,正则妙用
- 2024-11-16 348.C# 中的正则表达式断言:精确匹配的秘诀
- 2024-11-16 《MySQL 入门教程》第 09 篇 字符串模式匹配
- 2024-11-16 mysql正则匹配中文时存在的问题(mysql 正则匹配)
- 2024-11-16 技术趣讲 | 60 分钟搞懂「正则表达式」
- 2024-11-16 PHP 正则表达式匹配中文问题(php正则表达式匹配字符串)
- 2024-11-16 JZ-052-正则表达式匹配(正则表达式 匹配?)
- 2024-11-16 Nginx Location深入了解匹配优先级的秘密#java面试
- 2024-11-16 PHP正则表达式核心技术完全详解 第7节 数组元素正则匹配
- 2024-11-16 「正则表达式」 匹配分组(正则表达式匹配任意内容)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)