2017-01-11 5 views
1

Pythonの正規表現に関する助けが必要です。 私はこのテキストを持っている:Pythonでの正規表現は、最も近いセクションを選択する必要があります

part101_add(
    name = "part101-1", 
    dev2_serial = "dev_l622_01", 
    serial_port = "/dev/tty-part101-1", 
    yok_serial = "YT8388" 
) 
yok_tar_add("YT8388", None) 
part2_add(
    name = "part2-1", 
    serial_number = "SERIALNUMBER", 
    serial_port = "/dev/tty-part2-1", 
    yok_serial = "YT03044", 
    yok_port_board = "N" 
) 
yok_tar_add("YT03044", None) 

私はすべての部品*の_ADDとその内容を選択する必要があります。例えば :

part101_add: 

name = "part101-1", 
dev2_serial = "dev_l622_01", 
serial_port = "/dev/tty-part101-1", 
yok_serial = "YT8388" 

part2_add: 
serial_number = "SERIALNUMBER", 
serial_port = "/dev/tty-part2-1", 
yok_serial = "YT03044", 
yok_port_board = "N" 

問題は、結果を分離することができないというIMです。 このパターン使用して:あなたの助けを

regex = r"(.*?_add)\([\s\S.]*\)" 

感謝を。

答えて

0

私は、行の先頭と末尾にのみマッチする精密なパターンだろう、と[\s\S]で怠惰な量指定子を使用します。

    r"(?m)^(part\d+_add)\([\s\S]*?\)$" 
    

    this regex demo

    詳細を参照してください。

  • (?m) - インラインre.MULTILINE修飾子バージョン^行が
  • ^を終了一致するマッチラインの開始および$ - ライン
  • (part\d+_add)の開始 - グループ1 partを捕捉、1+桁、_add
  • \( - リテラル(
  • [\s\S]*? - 任意可能な限り少ない0個以上の文字。
  • \)$ - )行末。
+0

これは素晴らしいことです。あなたのパターンでもyok_port_addも選択されていても、それでも問題はありません。 – KinGorbaZ

+0

次に、 '。*?'部分 - ['(?m)^(part \ d + _add)\([ 'part' + 1桁以上で始まる行だけを選択したい場合は、' s \ S] *?\)$ '](https://regex101.com/r/bBqamC/1) –

+1

作品は素晴らしいです。あなたへの誇り。 – KinGorbaZ

関連する問題