回答編集履歴

4

修正

2020/04/24 08:57

投稿

LouiS0616
LouiS0616

スコア35668

test CHANGED
@@ -25,6 +25,40 @@
25
25
  >>> re.sub(r'(?<![A-Z])[A-Z](?![A-Z]) ?', '', '1 FF 11 F 111 G')
26
26
 
27
27
  '1 FF 11 111 '
28
+
29
+ ```
30
+
31
+
32
+
33
+ 追記・別解
34
+
35
+ ---
36
+
37
+ ド派手に質問を勘違いした上に、
38
+
39
+ 修正の結果KojiDoiさんのパクリみたいになってしまったので差別化のため追記。
40
+
41
+
42
+
43
+ 次のようなアプローチも有効だと思います。
44
+
45
+ ```Python
46
+
47
+ import re
48
+
49
+
50
+
51
+ src = '1 FF 11 F 111 G'
52
+
53
+ dst = ' '.join(
54
+
55
+ seq for seq in src.split()
56
+
57
+ if not re.fullmatch(r'[A-Z]', seq)
58
+
59
+ )
60
+
61
+ print(dst)
28
62
 
29
63
  ```
30
64
 

3

修正

2020/04/24 08:57

投稿

LouiS0616
LouiS0616

スコア35668

test CHANGED
@@ -14,17 +14,17 @@
14
14
 
15
15
 
16
16
 
17
- 否定先読みが便利です。
17
+ 否定先読み・後読みが便利です。
18
18
 
19
19
  ```Python
20
20
 
21
- >>> re.sub(r'[A-Z](?![A-Z])', '', '1 F 11 FF 111 FFF')
21
+ >>> re.sub(r'(?<![A-Z])[A-Z](?![A-Z]) ?', '', '1 F 11 FF 111 FFF')
22
22
 
23
- '1 11 F 111 FF'
23
+ '1 11 FF 111 FFF'
24
24
 
25
- >>> re.sub(r'[A-Z](?![A-Z])', '', '1 FF 11 F 111 G')
25
+ >>> re.sub(r'(?<![A-Z])[A-Z](?![A-Z]) ?', '', '1 FF 11 F 111 G')
26
26
 
27
- '1 F 11 111 '
27
+ '1 FF 11 111 '
28
28
 
29
29
  ```
30
30
 

2

追記

2020/04/24 08:46

投稿

LouiS0616
LouiS0616

スコア35668

test CHANGED
@@ -1,3 +1,39 @@
1
+ 質問の意図を読み違えていたので修正。
2
+
3
+
4
+
5
+ > 例えば、
6
+
7
+ hogehoge = "1 FF 11 F 111 G"
8
+
9
+ という文字列を
10
+
11
+ result = "1 FF 11 111" (空白については不問)
12
+
13
+ として取り出したいと考えております。
14
+
15
+
16
+
17
+ 否定先読みが便利です。
18
+
19
+ ```Python
20
+
21
+ >>> re.sub(r'[A-Z](?![A-Z])', '', '1 F 11 FF 111 FFF')
22
+
23
+ '1 11 F 111 FF'
24
+
25
+ >>> re.sub(r'[A-Z](?![A-Z])', '', '1 FF 11 F 111 G')
26
+
27
+ '1 F 11 111 '
28
+
29
+ ```
30
+
31
+
32
+
33
+ 修正前の回答
34
+
35
+ ---
36
+
1
37
  re.subはマッチした部分文字列の全てを置き換えます。そういう仕様です。
2
38
 
3
39
  置き換え回数を抑制したい場合は、引数countを利用します。

1

追記

2020/04/24 08:40

投稿

LouiS0616
LouiS0616

スコア35668

test CHANGED
@@ -16,4 +16,12 @@
16
16
 
17
17
 
18
18
 
19
+ [re --- 正規表現操作 — Python 3.8.2 ドキュメント](https://docs.python.org/ja/3/library/re.html#re.sub)
20
+
21
+
22
+
23
+ ---
24
+
19
25
  なお、正規表現はただ `[A-Z]` で充分です。
26
+
27
+ `[A-Z]{1}` は冗長ですし、`[A-Z]?` だとちょっと意味合いが変わってきます。