Ich habe eine Textdatei wie -
{[a] abc (b(c)d)}
Ich möchte den Inhalt zwischen diesen Klammern [] and (())
entfernen. so sollte die Ausgabe sein -
abc
Ich habe den Inhalt zwischen Klammern entfernt, konnte den Inhalt zwischen diesen []
jedoch nicht entfernen. Ich habe unten Code versucht -
import re
with open('data.txt') as f:
input = f.read()
line = input.replace("{","")
line = line.replace("}","")
output = re.sub(r'\(.*\)', "", line)
print output
Die Ausgabe ist -
[a] abc
In meinem Code ersetze ich zuerst das {}
und entferne dann den Inhalt von ()
. Ich möchte \[.*\]
in output = re.sub(r'\(.*\)', "", line)
dieser Zeile einfügen. Konnte aber keinen Weg finden, dies zu tun. Ich lerne immer noch Python. Ich stehe also vor diesem Problem. Bitte helfen Sie.
2 Antworten
Da es nicht so einfach ist, wie es zunächst aussehen mag, würden Sie höchstwahrscheinlich einen ausgewogenen (rekursiven) Ansatz benötigen, der mit neueres regex
Modul :
import regex as re
string = "some lorem ipsum {[a] abc (b(c)d)} some other lorem ipsum {defg}"
rx_part = re.compile(r'{(.*?)}')
rx_nested_parentheses = re.compile(r'\((?:[^()]*|(?R))*\)')
rx_nested_brackets = re.compile(r'\[(?:[^\[\]]*|(?R))*\]')
for match in rx_part.finditer(string):
part = rx_nested_brackets.sub('',
rx_nested_parentheses.sub('',
match.group(1))).strip()
print(part)
Welches würde ergeben
abc
defg
\( # opening parenthesis
(?: # non.capturing group
[^()]* # not ( nor )
| # or
(?R) # repeat the pattern
)*
\)
Ich habe es versucht und ich habe Ihre gewünschte Ausgabe bekommen ... Ich hoffe, ich habe Sie richtig gemacht
import re
with open('aa.txt') as f:
input = f.read()
line = input.replace("{","")
line = line.replace("}","")
output = re.sub(r'\[.*\]', "", line)
output = re.sub(r'\(.*\)', "", output)
print(output)
Verwandte Fragen
Neue Fragen
python
Python ist eine dynamisch typisierte Mehrzweck-Programmiersprache mit mehreren Paradigmen. Es wurde entwickelt, um schnell zu lernen, zu verstehen, zu verwenden und eine saubere und einheitliche Syntax durchzusetzen. Bitte beachten Sie, dass Python 2 ab dem 01.01.2020 offiziell nicht mehr unterstützt wird. Fügen Sie für versionenspezifische Python-Fragen das Tag [python-2.7] oder [python-3.x] hinzu. Wenn Sie eine Python-Variante (z. B. Jython, PyPy) oder eine Bibliothek (z. B. Pandas und NumPy) verwenden, fügen Sie diese bitte in die Tags ein.