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

質問編集履歴

3

追記

2017/12/06 04:48

投稿

roy29
roy29

スコア18

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

編集

2017/12/06 04:48

投稿

roy29
roy29

スコア18

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

追加

2017/12/05 08:02

投稿

roy29
roy29

スコア18

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
+ ```