2017-01-11 4 views
1

Besoin d'aide avec RegEx sur python. J'ai ce texte:Expression régulière avec python besoin de sélectionner la section la plus proche

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) 

J'ai besoin pour sélectionner toute la partie * _ADD et son contenu. par exemple:

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" 
problème est que

im incapable de séparer les résultats. lors de l'utilisation de ce modèle:

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

Merci pour votre aide.

Répondre

0

Je précise que la correspondance soit seulement au début et à la fin de la ligne, et utiliser un quantificateur paresseux avec [\s\S]:

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

Voir this regex demo

Détails:

  • (?m) - une version de modification en ligne re.MULTILINE pour faire ^ rencontre la ligne de départ et $ pour correspondre à la fin de la ligne
  • ^ - début d'une ligne
  • (part\d+_add) - Groupe 1 capturant part, 1+ chiffres, _add
  • \( - un ( littéral
  • [\s\S]*? - toute 0+ caractères, le moins possible jusqu'à
  • \)$ - un ) à la fin de la ligne.
+0

C'est génial! même si votre pattern sélectionne aussi le yok_port_add - mais ça ne me dérange pas :) – KinGorbaZ

+0

Ensuite, vous pouvez éditer la partie '. *?' - ['(? m)^(partie \ d + _add) \ ([\ s \ S] *? \) $ '] (https://regex101.com/r/bBqamC/1) si vous voulez seulement sélectionner les lignes commençant par' part' + un ou plusieurs chiffres. –

+1

fonctionne fantastique. Bravo à vous. – KinGorbaZ