回答編集履歴
3
文章訂正
answer
CHANGED
@@ -43,7 +43,7 @@
|
|
43
43
|
---
|
44
44
|
余談:
|
45
45
|
|
46
|
-
先読みは「消費されない」と言いましたが、じゃぁ`(?=a)`だけのパターンだと無限にマッチし続けるん
|
46
|
+
先読みは「消費されない」と言いましたが、じゃぁ`(?=a)`だけのパターンだと無限にマッチし続けるんでしょうか?ちょっと実験してみました。
|
47
47
|
|
48
48
|
```python
|
49
49
|
>>> it = re.finditer(r"(?=a)", "a")
|
2
若干訂正
answer
CHANGED
@@ -56,4 +56,6 @@
|
|
56
56
|
StopIteration
|
57
57
|
```
|
58
58
|
|
59
|
-
実際やってみるとちゃんと停止します。マッチした文字列範囲が`span=(0, 0)`となってはいますが同じ場所から検索するのでは意味がないということでちゃんと次の位置から探そうとしてくれるのですね。「ライブラリーの動作というのは合理的にうまいことできているもんだなぁ」と感心します・・・
|
59
|
+
実際やってみるとちゃんと停止します。マッチした文字列範囲が`span=(0, 0)`となってはいますが同じ場所から検索するのでは意味がないということでちゃんと次の位置から探そうとしてくれるのですね。「ライブラリーの動作というのは合理的にうまいことできているもんだなぁ」と感心します・・・
|
60
|
+
|
61
|
+
ただ、そういう意味では「原因」のところに書いた「直前にマッチした部分は次の検索の対象外になる」という説明は不正確であると思います。「分かり易さのための大雑把な説明」という程度に捉えていただければと思います。
|
1
説明訂正
answer
CHANGED
@@ -23,7 +23,7 @@
|
|
23
23
|
`(?<=a)` => 「後続するパターンの直前のパターンを指定するが、そのパターン自体はマッチ対象に含まない」
|
24
24
|
`(?=a)` => 「直前のパターンの直後のパターンを指定するが、そのパターン自体はマッチ対象に含まない」
|
25
25
|
|
26
|
-
といった感じです。
|
26
|
+
といった感じです。この表現(仕様の捉え方)はかなり大雑把です。使いこなすにはより正確な意味を把握しておいた方がよいと思います。後読みアサーションは「既にマッチ済みであってもその部分文字列も含めて前に戻って後端部分がマッチしているかをチェックしてくれ、かつ後読みアサーションにマッチした部分はマッチ結果に含めない」先読みアサーションは「後続する文字列がマッチするかをチェックするがマッチしても検索中の文字列からマッチ済みとして消費されない」というような捉え方もできると思います。
|
27
27
|
|
28
28
|
結局、次のようにできます。
|
29
29
|
|
@@ -38,4 +38,22 @@
|
|
38
38
|
<_sre.SRE_Match object; span=(3, 4), match='a'>
|
39
39
|
<_sre.SRE_Match object; span=(4, 5), match='b'>
|
40
40
|
|
41
|
-
```
|
41
|
+
```
|
42
|
+
|
43
|
+
---
|
44
|
+
余談:
|
45
|
+
|
46
|
+
先読みは「消費されない」と言いましたが、じゃぁ`(?=a)`だけのパターンだと無限にマッチし続けるんじゃないかと思ってしまいますが、
|
47
|
+
|
48
|
+
```python
|
49
|
+
>>> it = re.finditer(r"(?=a)", "a")
|
50
|
+
>>> it.__next__()
|
51
|
+
<_sre.SRE_Match object; span=(0, 0), match=''>
|
52
|
+
>>> it.__next__()
|
53
|
+
Traceback (most recent call last):
|
54
|
+
File "<pyshell#20>", line 1, in <module>
|
55
|
+
it.__next__()
|
56
|
+
StopIteration
|
57
|
+
```
|
58
|
+
|
59
|
+
実際やってみるとちゃんと停止します。マッチした文字列範囲が`span=(0, 0)`となってはいますが同じ場所から検索するのでは意味がないということでちゃんと次の位置から探そうとしてくれるのですね。「ライブラリーの動作というのは合理的にうまいことできているもんだなぁ」と感心します・・・
|