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])
注意,*或+后面跟着?表示非贪婪匹配,意思是匹配到第一个符合条件的结尾即可。
可以使用下面的两个小技巧:
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 |
|
上面这句话是将回车换行,变成换行。这是为了将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正则表达式指南,此处仅供作者查阅。