2017-10-17 23 views
0

私は、nwodkramファイルをHTMLファイルに変換するプロジェクトで作業しています。文字列内の特定の構造を検索します。

def parser_nwodkram(text): 
    string = list(text) 

    counter = 0  # Count number of characters in string 

    for char in string: 
     if char == '[': 
      sq_par_0 = counter  # Location of square parenthesis 0 
     if char == ']': 
      if 'sq_par_0' in locals(): 
       url = "".join(string[sq_par_0+1:counter]) 
     if char == '(': 
      if 'url' in locals(): 
       par_0 = counter 
     if char == ')': 
      if 'par_0' in locals(): 
       url_ref = r"<a href='{}'>{}<\a>".format(\ 
          "".join(string[par_0+1:counter]), url) 
      string[counter] = url_ref 
      del string[sq_par_0:counter] 

     counter += 1 

    return "".join(string) 

が、私はそれがよりエレガントやりたい:nwodkram URLがフォーム私はこのような何かを行うことができ、HTMLで

<a href='www.stackoveflow.com'>This is StackOverflow<\a>. 

に対応

[www.stackoverflow.com](This is StackOverflow) 

に与えられているに効率的で、文字列内の特定の構造体を検索する方法があります。この場合、

[...](...)? 
+0

本当にregexpを使うべきです:https://regexr.com – Akxe

答えて

2

からPythonの組み込みの正規表現を使用することができます。このためにre.searchに再グループを作成し、両方の要素を取得することができます。例:

import re 
def parser_nwodkram(text): 
    match = re.search('\[(.*?)\]\((.*?)\)',text) 
    url_ref = "<a href='%s'>%s</a>" % (match.group(1), match.group(2)) 
    print url_ref 

parser_nwodkram('[www.stackoverflow.com](This is StackOverflow)') 

出力:

<a href='www.stackoverflow.com'>This is StackOverflow</a> 

さらにあなたが処理するために正規表現のための適切な取り扱いの例外(ここではAttributeError)を実装することができ、あなたの問題のために

>>> a = '[www.stackoverflow.com](This is StackOverflow)' 
>>> import re 
>>> match = re.search('(\[.*?\])(\(.*?\))',a) 
>>> match.group() 
'[www.stackoverflow.com](This is StackOverflow)' 
>>> match.group(1) 
'[www.stackoverflow.com]' 
>>> match.group(2) 
'(This is StackOverflow)' 
>>> 

、単にのようになりますテキストが適切に与えられていない状況

0

あなたはいつもあなたは、この使用して正規表現を実装することができhere

関連する問題