回答編集履歴

4

説明変更(うまく説明できないので)

2022/09/22 23:59

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -1,4 +1,4 @@
1
- ドットの次で一致して webpが挿入され、挿入された文字列の後ろで再び一致するので webp がもう一度挿入されす。
1
+ ドットの次で一致して webpが挿入され、挿入された文字列で再び webp が挿入されているようで
2
2
  正規表現を [^.]+$ にすれば1回置換されるだけで済みます。
3
3
  ただし、ファイルの先頭がドットで始まる場合もあるので、os.path.splitextやpathlib.Path を使った方がいいと思います。
4
4
 

3

説明追記

2022/09/22 23:51

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -1,5 +1,6 @@
1
+ ドットの次で一致して webpが挿入され、挿入された文字列の後ろで再び一致するので webp がもう一度挿入されます。
1
- ドット含めといいです
2
+ 正規表現 [^.]+$ にすれば1回置換されだけ済みます。
2
- ファイルの先頭がドットで始まる場合もあるので、os.path.splitextやpathlib.Path を使った方がいいと思います。
3
+ ただし、ファイルの先頭がドットで始まる場合もあるので、os.path.splitextやpathlib.Path を使った方がいいと思います。
3
4
 
4
5
  ```py
5
6
  import re
@@ -7,12 +8,12 @@
7
8
  import pathlib
8
9
 
9
10
  name = 'hoge.jpg'
10
- print(re.sub('\.[^.]+$', '.webp', name));
11
+ print(re.sub('[^.]+$', 'webp', name));
11
12
  print(os.path.splitext(name)[0] + '.webp')
12
13
  print(pathlib.Path(name).stem + '.webp')
13
14
 
14
15
  name = '.profile'
15
- print(re.sub('\.[^.]+$', '.webp', name));
16
+ print(re.sub('[^.]+$', 'webp', name));
16
17
  print(os.path.splitext(name)[0] + '.webp')
17
18
  print(pathlib.Path(name).stem + '.webp')
18
19
  ```

2

内容変更

2022/09/22 23:42

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -1,13 +1,28 @@
1
1
  ドットを含めるといいですよ。
2
- 正規表現他に文字列分割やpathlib.Path を使う手もあります。
2
+ ファイル先頭がドットで始まる場合もあるのでos.path.splitextやpathlib.Path を使った方がいいと思います。
3
3
 
4
4
  ```py
5
5
  import re
6
+ import os
6
7
  import pathlib
7
8
 
8
9
  name = 'hoge.jpg'
9
- print(re.sub('\..*$', '.webp', name));
10
+ print(re.sub('\.[^.]+$', '.webp', name));
10
- print(name.split('.')[0] + '.webp')
11
+ print(os.path.splitext(name)[0] + '.webp')
12
+ print(pathlib.Path(name).stem + '.webp')
13
+
14
+ name = '.profile'
15
+ print(re.sub('\.[^.]+$', '.webp', name));
16
+ print(os.path.splitext(name)[0] + '.webp')
11
17
  print(pathlib.Path(name).stem + '.webp')
12
18
  ```
13
19
 
20
+ ```text:実行結果
21
+ hoge.webp
22
+ hoge.webp
23
+ hoge.webp
24
+ .webp
25
+ .profile.webp
26
+ .profile.webp
27
+ ```
28
+

1

最初のドットで分割するように変更

2022/09/22 23:33

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -6,7 +6,7 @@
6
6
  import pathlib
7
7
 
8
8
  name = 'hoge.jpg'
9
- print(re.sub('\.[^.]*$', '.webp', name));
9
+ print(re.sub('\..*$', '.webp', name));
10
10
  print(name.split('.')[0] + '.webp')
11
11
  print(pathlib.Path(name).stem + '.webp')
12
12
  ```