0

以下を代用したい。

 default by <http://www.mycompany.com/>
 db: by <http://www.mydbcompany.com/>

次の形式のデータがあります。

   <a> <b> <c>.
   <d> db:connect <e>.
   db:start <f> <g>.
   <h> <i> "hello".

次に、このデータを次の形式に変換します。

   <http://www.mycompany.com/a> <http://www.mycompany.com/b> <http://www.mycompany.com/c>.
   <http://www.mycompany.com/d> <http://www.mydbcompany.com/connect> <http://www.mycompany.com/e>.
   <http://www.mydbcompany.com/start> <http://www.mycompany.com/f> <http://www.mycompany.com/g>.
   <http://www.mycompany.com/h> <http://www.mycompany.com/i> "hello".

現在、目的の形式を実現しようとしている方法は、次を使用して各行を分割することです。

line1=re.split('(?<=)\s+(?=<)',line)

そして、line1[0]、line1[1]、line1[2]について、私はしようとします

substitute < by <http://www.mycompany.com/

ただし、私の問題は、このアプローチが db: と引用符では機能しないことです。Pythonで目的の出力を達成する方法はありますか

4

1 に答える 1

1

なぜre.subですか?

S = """\
<a> <b> <c>.
<d> db:connect <e>.
db:start <f> <g>.
<h> <i> "hello".
"""

import re

expand_tags = re.sub(r"<(.*?)>", r"<http://www.mycompany.com/\1>", S)
expand_db = re.sub(r"db:(.*?)\s", r"<http://www.mydbcompany.com/\1>", expand_tags)

print(expand_db)
#>>> <http://www.mycompany.com/a> <http://www.mycompany.com/b> <http://www.mycompany.com/c>.
#>>> <http://www.mycompany.com/d> <http://www.mydbcompany.com/connect><http://www.mycompany.com/e>.
#>>> <http://www.mydbcompany.com/start><http://www.mycompany.com/f> <http://www.mycompany.com/g>.
#>>> <http://www.mycompany.com/h> <http://www.mycompany.com/i> "hello".

2 番目の部分の\1は、最初の部分の括弧内にあるものを意味するので、パターンを一致させて置換に入れることができます。ただし、これは奇妙なことのように思えるので、設計全体を再検討することをお勧めします。

于 2013-09-28T20:43:35.093 に答える