2016-04-11 9 views
2

Wie kann ich Leerzeichen vor der geöffneten Klammer ( hinzufügen, wenn ein Zeichen vorhanden ist, und keinen Platz hinzufügen, wenn ein Leerzeichen vorhanden ist?Leerzeichen vor der Klammer hinzufügen, wenn ein Zeichen vorhanden ist

Ich habe versucht, mit diesem Ausdruck:

re.sub("\[^}]*\(", ' $1', line) 

Aber es funktioniert nicht.

Wie kann ich überprüfen, ob vor der geöffneten Klammer ein Zeichen vorhanden ist und, wenn kein Platz vorhanden ist, Speicherplatz hinzufügen?

+0

Verwenden Sie in Python '\ 1' Stil Rückverweise mit einem Raw-String-Literal. Und Sie haben keine Capture-Gruppen, so dass Sie '\ 1' hier überhaupt nicht verwenden können. –

+1

'line = re (r '(? anubhava

+0

@anubhava: Es hängt auch davon ab, ob ein Leerzeichen eingefügt werden soll, wenn '(' ist bei der string start. –

Antwort

1

Sie die folgende regex verwenden. Die (\S) wird in Gruppe 1 jedes Zeichen erfassen, das kein Leerzeichen ist. Da es ein konsumierendes Submuster ist, wird keine ( am String-Start gefunden (es muss ein Zeichen vor einem ( sein).

Die Backreferences sind mit einem Backslash in Python definiert (oder mit \g<n> Syntax, um sie eindeutig zu machen).

Beachten Sie, dass auch am Anfang einer Zeichenkette ein ( anzupassen (ein Leerzeichen vor den ersten ( in einem String hinzuzufügen), verwendet r'(?<!\s)\(' regex (mit einem nicht-verbrauchenden Unter-Pattern - eine negative Lookbehind (?<!\s), die sicher, es macht ist kein Leerzeichen vor einem ():

re.sub(r"(?<!\s)\(", r' (', "(some text)") # => " (some text)" 

Siehe Python demo:

import re 
print(re.sub(r"(\S)\(", r'\1 (', "(some text)"))  # => (some text) 
print(re.sub(r"(\S)\(", r'\1 (', "Text(some text)")) # => Text (some text) 
print(re.sub(r"(?<!\s)\(", r' (', "(some text)"))  # => (some text) 

die Verwendung von rohem String Bitte beachten Sie, wörtlichen s, um sowohl die Regex- als auch die Regex-Ersetzung zu deklarieren (dies hilft, viele unerwartete Probleme zu vermeiden). Siehe What exactly is a “raw string regex” and how can you use it?

+1

Sie haben mein Problem gelöst, vielen Dank! – Robson

1

Try Unter dies:

(\w)\(

mit diesem:

(\S)\(

und ersetzen mit:

\1 (

Demo

Verwandte Themen