第一章:文本-re:正则表达式-搜索选项(2)

1.3.7.2 多行输入
有两个标志会影响如何完成多行输入中的搜索:MULTILINE和DOTALL。MULTILINE标志控制模式匹配代码如何对包含换行符的文本处理锚定指令。打开多行模式时,对^和$的锚定规则除了应用于整个字符串之外,还会在各行的开头和末尾应用。

import re

text = 'This is some text -- with punctuation .\nA second line.'
pattern = r'(^\w+)|(\w+\S*$)'
single_line = re.compile(pattern)
multiline = re.compile(pattern,re.MULTILINE)

print('Text:\n {!r}'.format(text))
print('Pattern:\n {}'.format(pattern))
print('Single Line:')

for match in single_line.findall(text):
    print(' {!r}'.format(match))
print('Multline   :')

for match in multiline.findall(text):
    print(' {!r}'.format(match))

这个例子中的模式可以匹配输入的第一个单词或最后一个单词。他会匹配字符串末尾的line.,尽管这里没有换行符。

运行结果:

Text:
‘This is some text – with punctuation .\nA second line.’
Pattern:
(^\w+)|(\w+\S*$)
Single Line:
(‘This’, ‘’)
(’’, ‘line.’)
Multline :
(‘This’, ‘’)
(‘A’, ‘’)
(’’, ‘line.’)

DOTALL是另一个与多行文本有关的标志。正常情况下,点字符(.)可以匹配输入文本中除换行符外的所有字符。这个标志允许点字符还可以匹配换行符。

import re

text = 'This is some text -- with punctuation.\nA second line.'

pattern = r'.+'
no_newlines = re.compile(pattern)
dotall = re.compile(pattern,re.DOTALL)

print('Text:\n {!r}'.format(text))
print('Pattern:\n {}'.format(pattern))
print('No newlines:')
for match in no_newlines.findall(text):
    print(' {!r}'.format(match))

print('Dotall    :')
for match in dotall.findall(text):
    print(' {!r}'.format(match))

如果没有这个标志,输入文本的各行会单独匹配模式。增加了这个标志则会消费整个字符串。
运行结果:

Text:
‘This is some text – with punctuation.\nA second line.’
Pattern:
.+
No newlines:
‘This is some text – with punctuation.’
‘A second line.’
Dotall :
‘This is some text – with punctuation.\nA second line.’

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值