回答編集履歴

3

質問変更内容に合わせて変更

2020/01/03 09:48

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -1,17 +1,27 @@
1
- いろいろな方法があると思いますが簡単な例。
1
+ ```python
2
2
 
3
+ def find(lines, target, n=4):
4
+
5
+ i = 0
6
+
7
+ while i < len(lines):
8
+
3
- 12333\n444\n があったとしても一致してしまうので、正規表現を使った方がいいでしょうけど。
9
+ if lines[i:i+len(target)] == target:
10
+
11
+ i += len(target)
12
+
13
+ yield lines[i:i+n]
14
+
15
+ i += n
16
+
17
+ else:
18
+
19
+ i += 1
4
20
 
5
21
 
6
22
 
7
- ```python
23
+ found = list(find(open('test.txt').readlines(), ['333\n', '444\n']))
8
24
 
9
- >>> open("test.txt").read().split("333\n444\n")[1].splitlines()[:4]
25
+ print(found)
10
-
11
- ['555', '666', '777', '888']
12
-
13
- >>> open("test.txt").read().split("333\n444\n")[1].splitlines()[:-1]
14
-
15
- ['555', '666', '777', '888']
16
26
 
17
27
  ```

2

意図しないケースを追記

2020/01/03 09:47

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -1,4 +1,6 @@
1
1
  いろいろな方法があると思いますが簡単な例。
2
+
3
+ 12333\n444\n があったとしても一致してしまうので、正規表現を使った方がいいでしょうけど。
2
4
 
3
5
 
4
6
 

1

説明文追加

2020/01/03 07:19

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -1,3 +1,7 @@
1
+ いろいろな方法があると思いますが簡単な例。
2
+
3
+
4
+
1
5
  ```python
2
6
 
3
7
  >>> open("test.txt").read().split("333\n444\n")[1].splitlines()[:4]