Ich möchte in der Lage sein, 2 Teile aus einer Zeichenfolge zu extrahieren, die möglicherweise durch ein bestimmtes Schlüsselwort getrennt sind. Wenn das Schlüsselwort nicht vorhanden ist, wird davon ausgegangen, dass nur das erste Stück bereitgestellt wird. Um ein konkreteres (und klareres) Beispiel zu geben:

'a key b' ---> return (a, b)

'a' (ohne 'Schlüssel'-Zeichenfolge identifiziert) ---> return (a,' ')

Ich habe zuerst versucht, den regulären Ausdruck "(. ) Schlüssel (. )" zu verwenden, was für Fall 2 offensichtlich nicht funktioniert ... dann "(. ) (Schlüssel)? (. ) "aber das funktioniert nicht für Fall 1 ... Ich arbeite mit Python und der Funktion findall ().

Irgendeine Idee bitte? Ich denke, es hat mit dem gierigen "(. *)" Zu tun, kann es aber nicht herausfinden.

Danke vielmals!

0
fdb 19 Aug. 2015 im 20:26

3 Antworten

Beste Antwort
>>> "a key b".split(" key ")
['a', 'b']
>>> "a".split(" key ")
['a']
>>>
4
Joe Young 19 Aug. 2015 im 17:29

Split scheint eine natürliche Lösung für Ihr Problem zu sein:

def extract(text):
    return ([part.strip() for part in text.split("key", 1)] + [''])[:2]

for test in ["a key b", "a", "a key", "a longer example of key is this"]:
    print extract(test)

Dies würde Ihnen die folgenden Ergebnisse geben:

['a', 'b']
['a', '']
['a', '']
['a longer example of', 'is this']

Wenn Sie wirklich einen regulären Ausdruck verwenden möchten, können Sie Folgendes verwenden, um dieselben Ergebnisse zu erzielen:

def extract(text):
    return re.search(r'(.*?)(?:\s+key|\Z)\s*(.*)', text).groups()
0
Martin Evans 19 Aug. 2015 im 18:00

Was ist los mit string.split()?

string.split(' key ') 
1
Avinash Raj 19 Aug. 2015 im 17:29