回答編集履歴

2

追記

2019/11/09 11:57

投稿

Zuishin
Zuishin

スコア28656

test CHANGED
@@ -3,3 +3,61 @@
3
3
 
4
4
 
5
5
  これは正規表現ではできません。構文解析の出番です。
6
+
7
+
8
+
9
+ # 追記
10
+
11
+
12
+
13
+ 例文は正しく分割できます。
14
+
15
+
16
+
17
+ ```Python
18
+
19
+ import re
20
+
21
+
22
+
23
+ input = 'あ。「いい。」いい。ううう「ううう。」ううう。ええええ。「ええええ。」ええええ。おおおおお「おおおおお」おおおおお。「かか。かかか。」かかか。「「きき。」ききき。」きき。'
24
+
25
+ input2 = 'くく「くく『くく。』くく。」くく。けけ「けけ『けけ』けけ」けけ。ここ「ここ『ここ。ここ』」ここ。『ささ。ささ。』ささ。'
26
+
27
+
28
+
29
+ def splitByPeriod(s):
30
+
31
+ start = 0
32
+
33
+ braceCount = 0
34
+
35
+ for i in range(len(s)):
36
+
37
+ if s[i] == '「' or s[i] == '『':
38
+
39
+ braceCount += 1
40
+
41
+ elif s[i] == '」' or s[i] == '』':
42
+
43
+ braceCount -= 1
44
+
45
+ elif s[i] == '。' and braceCount <= 0:
46
+
47
+ yield s[start:i + 1]
48
+
49
+ start = i + 1
50
+
51
+
52
+
53
+ for phrase in splitByPeriod(input):
54
+
55
+ print(phrase)
56
+
57
+
58
+
59
+ for phrase in splitByPeriod(input2):
60
+
61
+ print(phrase)
62
+
63
+ ```

1

修正

2019/11/09 11:57

投稿

Zuishin
Zuishin

スコア28656

test CHANGED
@@ -1,19 +1,5 @@
1
- 依頼返事てくる前にできたので書いておきます。
1
+ 規表現で回答しましたが、例がカッコネストあるなど想定外だったので撤回します。
2
2
 
3
3
 
4
4
 
5
- ```Python
6
-
7
- import re
8
-
9
-
10
-
11
- input = '太郎は言った。そして言った。「そうだ。京都行こう」二郎は言った。「いやだ」'
12
-
13
- pattern = r'「.*?」|『.*?』|.*?。'
14
-
15
- for phrase in re.finditer(pattern, input):
16
-
17
- print(phrase.group())
5
+ これは正規表現ではできません。構文解析の出番です。
18
-
19
- ```