2016-03-31 9 views
1

Ich habe ein Muster geschrieben, um typedef gefolgt von einer beliebigen Anzahl von Zeichen, bis es die ersten öffnenden geschweiften Klammern gefolgt von einem *, dann ein Wort, schließende geschweifte Klammern und so weiter. das Muster istpassendes Muster mit regulärem Ausdruck in Python

pattern_funp = re.compile(r"typedef(.*?)\(\*(\w+)\s*\)\s*\(.*?\)\s*") 

Das obige Muster entspricht acpi_adr_space_setup in der Zeile unter dem korrekt ist:

typedef acpi_status(*acpi_adr_space_setup) (acpi_handle region_handle,u32 function,void *handler_context, void **region_context); 

aber in der folgenden Zeile passt es func, die nicht das, was ich will:

typedef void *call_rcu_func_t (struct rcu_head *head,void (*func1)(struct rcu_head *head)); 

Das Muster sollte mit dem ersten übereinstimmen (gefolgt von * nicht dem zweiten (mit *.

+0

Dann, was Sie im zweiten Beispiel übereinstimmen sollen? – Quinn

+0

der Regex sollte nicht mit dem 2. Beispiel übereinstimmen. –

Antwort

2

Nicht sicher bekommen, was du meinst, aber wenn Sie nichts wollen nach der ersten Klammer übereinstimmen, [^(] statt . setzen sollte es tun:

pattern_funp = re.compile(r"typedef([^(]*?)\(\*(\w+)\s*\)\s*\(.*?\)\s*") 
Verwandte Themen