建议:
如果您正在处理多行文本(即\n),那么您需要将参数:flags=re.DOTALL 传递给您的re.findall() 方法。
大小写:多行文本
# string to be searched
a = """
__Hello__ **This
is a multiline test** __it is__ **Lego
**
"""
# pattern variations
bold_pattern = r'\*\*(.*?)\*\*'
# call re functions
match = re.findall(pattern=bold_pattern, string=a)
flag_match = re.findall(pattern=bold_pattern, string=a, flags=re.DOTALL)
# print results for observation
print(match)
print(flag_match) # using the flag
返回:
[' __it is__ ']
['This \nis a multiline test', 'Lego\n']
来自 Python 3.8.2 文档:
“可以通过指定标志值来修改表达式的行为。”
处理 (\n)
根据您的需要,您可以通过几种不同的方式处理\n。如果需要,我将在整个文本正文上使用 re.sub(),然后再执行任何其他操作将它们全部删除。
编译还是不编译?
来自 Python 3.8.2 文档:
“其中一些函数是编译正则表达式的全功能方法的简化版本。大多数非平凡的应用程序总是使用编译形式...
...但是当表达式将在单个程序中多次使用时,使用 re.compile() 并保存生成的正则表达式对象以供重用会更有效。"
和
“传递给 re.compile() 的最新模式的编译版本和模块级匹配函数被缓存,因此一次只使用几个正则表达式的程序不必担心编译正则表达式。 "
因此,除非您使用一大堆模式,否则您不应该从编译中看到明显的改进。
您还可以使用%%time 魔术命令来测试这两个选项,看看您是否在本地发现了优势!
祝你好运!