我用这个教程来学习python中的regex-看起来是一个很好的教程!你知道吗
所以教程如下: http://regex101.com/r/vB7mV2
根据教程,我应该使用的代码是:
import re
p = re.compile(r'^(?P<Given>\w+) (?P<Middle>\w\.) (?P<Family>\w+)$', re.MULTILINE)
str = "Jack A. Smith\nMary B. Miller"
m = p.match(str)
print m.group(0)
Jack A. Smith
print m.group(1)
Jack
print m.group(2)
A.
print m.group(3)
Smith
print m.group(4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: no such group
令我惊讶的是,我失去了小玛丽·B·米勒——那里没有m.group(4)
所以我有几个后续问题:
(1)我正在使用multiline,为什么它只匹配第一个,即示例中的Jack A.Smith?你知道吗
(2)我使用给定的、中间的和族作为每个匹配的标记名,如何使用这些标记而不仅仅是m.group(i)
访问数据
(3)假设我想进行匹配和替换?例如,我想匹配Mary B.Miller,并替换为Jane M.Goldstein,这样替换的字符串现在将是:str = "Jack A. Smith\nJane M. Goldstein"
。我怎么做到的?(有点不相关,我们称之为奖金Q)
来自re模块的文档:
注意,即使在多行模式下,重新匹配()只匹配字符串的开头,而不是每行的开头。
你可以用关于芬德尔或者重新查找要查找所有匹配项:
要使用组名而不是索引,可以指定已使用的组名:
从re.match()复制
这就是为什么你只得到第一场比赛。如果需要所有匹配项,请使用re.findall()
将整个正则表达式包装在
()
中,下面是一个示例:输出:
更新::
关于你的问题2:用re.finditer()来回答这个问题。举个例子:
问题3:
使用re.sub()就足够了。你知道吗
您可以使用
m.group('Given'), m.group('Middle'), m.group('Family')
据我所知,
re.sub()
可以用于搜索和替换。你知道吗相关问题 更多 >
编程相关推荐