【Python】Python正则表达式速查表

 


  •  匹配字符串中的hashtags

import re
with open("text.txt", "r", encoding="utf-8") as fd:
    data = fd.read()

pattern = re.compile(r'(#.*?\s+?)')
match = re.findall(pattern,data)
print(match[:10])

注意,*或+后面跟着?表示非贪婪匹配,意思是匹配到第一个符合条件的结尾即可。


  • 匹配到TAB和空格的混合字符

可以使用下面的两个小技巧:

1). 使用\s来匹配

>>> import re
>>> match = re.match(r"Hello(\s*)(.*)World!", "Hello              Python World!"
)
>>> match.groups()
('\t\t  ', 'Python ')
>>>
2). 使用[\t ]来匹配

>>> import re
>>> match = re.match(r"Hello([\t ]*)(.*)World!", "Hello           Python World!"
)
>>> match.groups()
('\t\t  ', 'Python ')
>>>
上面的小技巧,都能完美匹配TAB和空格键.

参考:https://blog.csdn.net/Jerry_1126/article/details/80714273 


  • 判断一个字符串是否包含某子串

 Python find()  ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果包含子字符串返回开始的索引值,否则返回-1。

看示例:

print(result3)string = 'this is string'
>>>result1 = string.find('is')
>>>print(result1)
2
参考:https://blog.csdn.net/qq_38251616/article/details/79775497  


  • 几个函数对比

re.match() 函数,总是从字符串‘开头曲匹配',返回对象需要用group()来显示

re.search() 函数,对整个字符串进行搜索匹配,返回第一个匹配的字符串的 match 对象,返回对象需要用group()来显示

re.findall()函数,查找所有match的对象返回,返回对象不需要用group()来显示

re.sub函数(),则相当于字符串操作中的replace,比如

1

sometext = re.sub("(?isu)\r\n""\n", sometext)

 上面这句话是将回车换行,变成换行。这是为了将windows下的文本文件移到linux下,防止某些软件不兼容所做的处理。


正则表达式通常用于在文本中查找匹配的字符串。Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符;非贪婪的则相反,总是尝试匹配尽可能少的字符。例如:正则表达式"ab*"如果用于查找"abbbc",将找到"abbb"。而如果使用非贪婪的数量词"ab*?",将找到"a"。

 

反斜杠的困扰

与大多数编程语言相同,正则表达式里使用"\"作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配文本中的字符"\",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\\\\":前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r"\\"表示。同样,匹配一个数字的"\\d"可以写成r"\d"。有了原生字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。

Python通过re模块提供对正则表达式的支持。使用re的一般步骤是先将正则表达式的字符串形式编译为Pattern实例,然后使用Pattern实例处理文本并获得匹配结果(一个Match实例),最后使用Match实例获得信息,进行其他的操作。

 

# encoding: UTF-8
import re
 
# 将正则表达式编译成Pattern对象
pattern = re.compile(r'hello')
 
# 使用Pattern匹配文本,获得匹配结果,无法匹配时将返回None
match = pattern.match('hello world!')
 
if match:
    # 使用Match获得分组信息
    print match.group()
 
### 输出 ###
# hello

 

更详细内容可看AstralWind的帖子:Python正则表达式指南,此处仅供作者查阅。

 

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页