我有一个正则表达式,用于打印指定范围内的文件行。你知道吗
例如:
my _car_(10)
skoda
audi
my home
good
my _car_(11)
benz
输出为:
(10)
skoda
audi
(11)
benz
预期:(我还需要打印my _car_
行)
my _car_(10)
skoda
audi
my _car_(11)
benz
编码:
import re
with open("in1.txt") as f:
lines = f.read()
m = re.findall(r'(?s)my _car_\s*(.*?)my', lines)
for i in m:
print i
请帮我解决它,答案将不胜感激!你知道吗
要包含
my _car_
,只需移动capture组的左括号。你知道吗但这又提出了第二个问题。您在结果中包含了后面的“my”。使用lookahead
(?=...)
避免捕获它。你知道吗但这又引发了另一个问题。最后一辆车没有尾随的
my
。所以我们也搜索字符串的结尾。你知道吗最终结果:
与正则表达式搜索无关,
print
的使用在项之间引入了一个额外的行。我们可以用os.write()
替换print
,也可以使用后面的,
来避免多余的行。你知道吗课程:
结果:
您可以使用积极的前瞻来实现这一点:
(?=(?:\n{2}|\Z))
断言_car_
之后的部分后跟2个换行符或字符串的结尾(\Z
)。你知道吗测试:
您只需扩展捕获组:
从这个
m = re.findall(r'(?s)my _car_\s*(.*?)my', lines)
为了这个
m = re.findall(r'(?s)(my _car_\s*.*?)my', lines)
应该这样做。你知道吗
但是根据您的正则表达式,您必须在最后一个值之后有一个
my
才能捕获它。你知道吗相关问题 更多 >
编程相关推荐