teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

テキスト修正

2020/03/08 04:02

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  ```
24
24
 
25
- - **動作確認用 Repl.it:** [https://repl.it/@jun68ykt/Q245434](https://repl.it/@jun68ykt/Q245434) --- サンプル#1
25
+ - **動作確認用 Repl.it:** [https://repl.it/@jun68ykt/Q245434](https://repl.it/@jun68ykt/Q245434) --- **サンプル#1**
26
26
 
27
27
 
28
28
 
@@ -51,7 +51,7 @@
51
51
  ```
52
52
  [('電話', ': ', '08099999999'), ('[電話番号]', '\n', '08012345678')]
53
53
  ```
54
- - **動作確認用Repl.it:** [https://repl.it/@jun68ykt/Q2454342](https://repl.it/@jun68ykt/Q2454342) --- サンプル#2
54
+ - **動作確認用Repl.it:** [https://repl.it/@jun68ykt/Q2454342](https://repl.it/@jun68ykt/Q2454342) --- **サンプル#2**
55
55
 
56
56
  上記の結果として得られるリスト`tels` の要素であるタプルの2番目の要素に、`(:?\s+)` にマッチした部分が入ってきますが、これをキャプチャしてこなくてもよい場合に、`?:` を付加した
57
57
 
@@ -63,11 +63,11 @@
63
63
  ```
64
64
  [('電話', '08099999999'), ('[電話番号]', '08012345678')]
65
65
  ```
66
- - **動作確認用Repl.it:** [https://repl.it/@jun68ykt/Q2454343](https://repl.it/@jun68ykt/Q2454343) --- サンプル#3
66
+ - **動作確認用Repl.it:** [https://repl.it/@jun68ykt/Q2454343](https://repl.it/@jun68ykt/Q2454343) --- **サンプル#3**
67
67
 
68
68
  上記の、サンプル#2 と サンプル#3の結果の違いが、キャプチャしないグループ `?:` の効果ですが、今あらためて見返すと、そもそもグループにしなければよかったので、以下で済みました。
69
69
 
70
70
  ```python3
71
71
  tels = re.findall(u"^([電話番号]|電話):?\s+([0-9]+)", msg, flags=re.MULTILINE)
72
72
  ```
73
- - **動作確認用Repl.it:** [https://repl.it/@jun68ykt/Q2454344](https://repl.it/@jun68ykt/Q2454344) --- サンプル#4
73
+ - **動作確認用Repl.it:** [https://repl.it/@jun68ykt/Q2454344](https://repl.it/@jun68ykt/Q2454344) --- **サンプル#4**

2

テキスト修正

2020/03/08 04:02

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -53,10 +53,10 @@
53
53
  ```
54
54
  - **動作確認用Repl.it:** [https://repl.it/@jun68ykt/Q2454342](https://repl.it/@jun68ykt/Q2454342) --- サンプル#2
55
55
 
56
- 上記の結果として得られるリスト`tels` の要素であるタプルの2番目の要素に、`(:?\s+)` にマッチした部分が入ってきますが、これキャプチャしてこなくてもよいので、`?:` を付加した
56
+ 上記の結果として得られるリスト`tels` の要素であるタプルの2番目の要素に、`(:?\s+)` にマッチした部分が入ってきますが、これキャプチャしてこなくてもよい場合に、`?:` を付加した
57
57
 
58
58
  ```python3
59
- tels = re.findall(u"^([電話番号]|電話)(:?\s+)([0-9]+)", msg, flags=re.MULTILINE)
59
+ tels = re.findall(u"^([電話番号]|電話)(?::?\s+)([0-9]+)", msg, flags=re.MULTILINE)
60
60
  ```
61
61
  とすると、`tels` の内容は以下になり、タプルの2番目の要素に、(コロンを含むときもある)空白文字の連続は、入ってこなくなります。
62
62
 

1

テキスト修正

2020/03/06 05:53

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -22,9 +22,52 @@
22
22
 
23
23
  ```
24
24
 
25
- - **動作確認用 Repl.it:** [https://repl.it/@jun68ykt/Q245434](https://repl.it/@jun68ykt/Q245434)
25
+ - **動作確認用 Repl.it:** [https://repl.it/@jun68ykt/Q245434](https://repl.it/@jun68ykt/Q245434) --- サンプル#1
26
26
 
27
27
 
28
28
 
29
29
 
30
- 上記では、変数 `msg` に入ってくる、処理対象のテキスト全体を、ご質問の内容から想像して書いているので、実際のものと相違があれば、コメントからお知らせください。
30
+ 上記では、変数 `msg` に入ってくる、処理対象のテキスト全体を、ご質問の内容から想像して書いているので、実際のものと相違があれば、コメントからお知らせください。
31
+
32
+
33
+ ### 追記
34
+
35
+ > ?::? はどういう意味になるのでしょうか??
36
+
37
+ `?::?` の先頭2文字の `?:` はキャプチャしないグループ([Non-Capturing Groups](https://www.regular-expressions.info/brackets.html))です。 3文字目以降の`:?`は、コロン`:`の1文字が有るまたは無い、の意味です。
38
+
39
+ `?::?` の先頭2文字を除去して、単に `:?` として、以下
40
+
41
+ ```python3
42
+ tels = re.findall(u"^([電話番号]|電話)(:?\s+)([0-9]+)", msg, flags=re.MULTILINE)
43
+ ```
44
+ のようにすると、 `(:?\s+)` もキャプチャされるので、
45
+
46
+ ```python3
47
+ tels = re.findall(u"^([電話番号]|電話)(:?\s+)([0-9]+)", msg, flags=re.MULTILINE)
48
+ ```
49
+ によって取得される `tels` の内容は以下になります。
50
+
51
+ ```
52
+ [('電話', ': ', '08099999999'), ('[電話番号]', '\n', '08012345678')]
53
+ ```
54
+ - **動作確認用Repl.it:** [https://repl.it/@jun68ykt/Q2454342](https://repl.it/@jun68ykt/Q2454342) --- サンプル#2
55
+
56
+ 上記の結果として得られるリスト`tels` の要素であるタプルの2番目の要素に、`(:?\s+)` にマッチした部分が入ってきますが、これはキャプチャしてこなくてもよいので、`?:` を付加した
57
+
58
+ ```python3
59
+ tels = re.findall(u"^([電話番号]|電話)(:?\s+)([0-9]+)", msg, flags=re.MULTILINE)
60
+ ```
61
+ とすると、`tels` の内容は以下になり、タプルの2番目の要素に、(コロンを含むときもある)空白文字の連続は、入ってこなくなります。
62
+
63
+ ```
64
+ [('電話', '08099999999'), ('[電話番号]', '08012345678')]
65
+ ```
66
+ - **動作確認用Repl.it:** [https://repl.it/@jun68ykt/Q2454343](https://repl.it/@jun68ykt/Q2454343) --- サンプル#3
67
+
68
+ 上記の、サンプル#2 と サンプル#3の結果の違いが、キャプチャしないグループ `?:` の効果ですが、今あらためて見返すと、そもそもグループにしなければよかったので、以下で済みました。
69
+
70
+ ```python3
71
+ tels = re.findall(u"^([電話番号]|電話):?\s+([0-9]+)", msg, flags=re.MULTILINE)
72
+ ```
73
+ - **動作確認用Repl.it:** [https://repl.it/@jun68ykt/Q2454344](https://repl.it/@jun68ykt/Q2454344) --- サンプル#4