我有一个文本文件,其中包含我需要提取的文本集,如下所示:
ITEM A blah blah blah ITEM B bloo bloo bloo ITEM A blee blee blee ITEM B
这是我到目前为止的工作代码:
finda = r'(Item\sA)'
findb = r'(Item\sB)'
match_a = re.finditer(finda, usefile, 2) # the "2" is a flag to say ignore case
match_b = re.finditer(findb, usefile, 2)
我知道我可以使用span,start和end之类的命令来查找匹配项的文本位置。但我需要多次这样做,所以我需要的是:
提前感谢!我一直在转动轮子。
答案 0 :(得分:2)
为什么不呢:
with open(fname, 'w') as file:
for match in re.finditer(r'Item A(.+?)Item B', subject, re.I):
s = match.group(1)
if len(s) > 50:
file.write(s)
注意:使用flags的实际数值是相当倾斜的,使用re
标志中提供。
答案 1 :(得分:2)
这可以在一个正则表达式中完成:
with open("output.txt", "w") as f:
for match in re.finditer(r"(?<=Item\sA)(?:(?!Item\sB).){50,}(?=Item\sB)", subject, re.I):
f.write(match.group()+"\n")
这与项目A和项目B之间的匹配。或者您是否也希望匹配分隔符?
正则表达式解释说:
(?<=Item\sA) # assert that we start our match right after "Item A"
(?: # start repeated group (non-capturing)
(?!Item\sB) # assert that we're not running into "Item B"
. # then match any character
){50,} # repeat this at least 50 times
(?=Item\sB) # then assert that "Item B" follows next (without making it part of the match)