質問編集履歴
3
追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -2,6 +2,14 @@
|
|
2
2
|
|
3
3
|
例えば`a = 'aaa, bbb[12, 13, 14]. ccc.'`といった文字列の角かっこに囲まれた数字を`'[12] [13] [14]'`のようにそれぞれを角かっこで囲うように変換したいです。
|
4
4
|
|
5
|
+
---
|
6
|
+
追記
|
7
|
+
すみません。例が不適切でした。
|
8
|
+
今回の質問は論文の引用表記を置換したいというものでした。
|
9
|
+
http://journals.plos.org/plosmedicine/article?id=10.1371/journal.pmed.0030232
|
10
|
+
|
11
|
+
---
|
12
|
+
|
5
13
|
問題は単純にカンマを角かっこに置換するだけではないという点です。
|
6
14
|
文章中に含まれている他のカンマは置き換えたくないです。
|
7
15
|
|
@@ -21,24 +29,31 @@
|
|
21
29
|
start = 0
|
22
30
|
dic = []
|
23
31
|
for tmp in words:
|
32
|
+
if re.match('[\d+]', tmp):
|
33
|
+
dic.append(tmp)
|
34
|
+
continue
|
35
|
+
if re.match('[\d+(-|–)\d+]', tmp):
|
36
|
+
dic.append(tmp)
|
37
|
+
continue
|
24
38
|
if re.match('[\d', tmp):
|
25
39
|
start = 1
|
26
40
|
num = tmp.strip('[').strip(',')
|
27
41
|
fin = '['+num+']'
|
28
|
-
print(fin)
|
42
|
+
# print(fin)
|
29
43
|
dic.append(fin)
|
30
44
|
continue
|
45
|
+
# if re.match('(\d+-)?\d+]', tmp):
|
31
|
-
if re.match('\d+]', tmp):
|
46
|
+
if re.match('.*\d+]', tmp):
|
32
47
|
start = 0
|
33
48
|
num = tmp.strip(']')
|
34
49
|
fin = '['+num+']'
|
35
|
-
print(fin)
|
50
|
+
# print(fin)
|
36
51
|
dic.append(fin)
|
37
52
|
continue
|
38
53
|
if start == 1:
|
39
54
|
tmp = tmp.strip(',')
|
40
55
|
fin = '['+tmp+']'
|
41
|
-
print(fin)
|
56
|
+
# print(fin)
|
42
57
|
dic.append(fin)
|
43
58
|
else:
|
44
59
|
dic.append(tmp)
|
2
編集
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
Python3でre.sub()を使った正規表現による置換に関して質問です。
|
2
2
|
|
3
|
-
`a = '[12, 13, 14]'`といった文字列を`'[12] [13] [14]'`に変換したいです。
|
3
|
+
例えば`a = 'aaa, bbb[12, 13, 14]. ccc.'`といった文字列の角かっこに囲まれた数字を`'[12] [13] [14]'`のようにそれぞれを角かっこで囲うように変換したいです。
|
4
4
|
|
5
|
-
問題は単純にカンマを置換するだけではないという点です。
|
5
|
+
問題は単純にカンマを角かっこに置換するだけではないという点です。
|
6
6
|
文章中に含まれている他のカンマは置き換えたくないです。
|
7
7
|
|
8
8
|
つまり、第一引数は以下のようになるかと思います。
|
1
追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -11,4 +11,36 @@
|
|
11
11
|
この条件で合致したときだけ', 'を'] ['に変換したいのですが、後方参照をどのように利用すればいいのかわかりません。
|
12
12
|
`re.sub('[(\d+, )+(\d+)]', r'[\1] [\2]', a)`としたところ`'[13, ] [15]'`となってしまいました。
|
13
13
|
|
14
|
-
アドバイスをいただけたら幸いです。
|
14
|
+
アドバイスをいただけたら幸いです。
|
15
|
+
|
16
|
+
*追記
|
17
|
+
正規表現を使わない方法については以下のような方法で解決できました。
|
18
|
+
引数はa.strip()です。
|
19
|
+
```
|
20
|
+
def get_refer(words):
|
21
|
+
start = 0
|
22
|
+
dic = []
|
23
|
+
for tmp in words:
|
24
|
+
if re.match('[\d', tmp):
|
25
|
+
start = 1
|
26
|
+
num = tmp.strip('[').strip(',')
|
27
|
+
fin = '['+num+']'
|
28
|
+
print(fin)
|
29
|
+
dic.append(fin)
|
30
|
+
continue
|
31
|
+
if re.match('\d+]', tmp):
|
32
|
+
start = 0
|
33
|
+
num = tmp.strip(']')
|
34
|
+
fin = '['+num+']'
|
35
|
+
print(fin)
|
36
|
+
dic.append(fin)
|
37
|
+
continue
|
38
|
+
if start == 1:
|
39
|
+
tmp = tmp.strip(',')
|
40
|
+
fin = '['+tmp+']'
|
41
|
+
print(fin)
|
42
|
+
dic.append(fin)
|
43
|
+
else:
|
44
|
+
dic.append(tmp)
|
45
|
+
return dic
|
46
|
+
```
|