[Trennmuster] Python-Skript "hyphenation.py"

Guenter Milde gm43 at e-mail.de
Sa Sep 5 16:26:24 CEST 2026


Am  3.09.26 schrieb Herbert Voß:
> Am 02.09.26 um 23:53 schrieb Keno Wehr:

>     wenn ich skripte/lib/py_patuse/hyphenation.py aufrufe, kommt die Meldung
>     "SyntaxWarning: invalid escape sequence '\p'". (Das Skript funktioniert
>     aber ansonsten.)

>     Ich bin mir nicht sicher, ob das Skript ein Update braucht oder meine
>     Konfiguration falsch ist. Ich habe Python 3.12.3.


> Changed in version 3.6: Unrecognized escape sequences produce a
> DeprecationWarning. In a future Python version they will be a SyntaxWarning and
> eventually a SyntaxError.

> \pattern  ->  \\pattern 
> \message -> \\message

> oder besser einen r-String benutzen.

Ich habe das lokal korrigiret, doch beim Hochladeversuch erhalte ich

  py_patuse > git push
  milde at repo.or.cz: Permission denied (publickey).
  Schwerwiegend: Konnte nicht vom Remote-Repository lesen.
  
  Bitte stellen Sie sicher, dass die korrekten Zugriffsberechtigungen bestehen
  und das Repository existiert.
  milde at heinz:/usr/local/src/wortliste/skripte/lib/py_patuse > 

Falls jemand den folgenden Patch einpflegen kann wäre ich froh:

>From 5f638511031250c2683df3a82df99a16362da17a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?G=C3=BCnter=20Milde?= <milde at users.sf.net>
Date: Sat, 5 Sep 2026 14:58:01 +0200
Subject: [PATCH] Python-Skripte: Korrigiere invalide "Escape-Sequenzen".

---
 skripte/lib/py_patuse/hyphenation.py      | 6 +++---
 skripte/lib/py_wortliste/stilfilter.py    | 2 +-
 skripte/lib/py_wortliste/wortliste.py     | 8 ++++----
 skripte/lib/py_wortliste/wortzerlegung.py | 6 +++---
 4 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/skripte/lib/py_patuse/hyphenation.py b/skripte/lib/py_patuse/hyphenation.py
index da9bb99..91ca31a 100755
--- a/skripte/lib/py_patuse/hyphenation.py
+++ b/skripte/lib/py_patuse/hyphenation.py
@@ -51,7 +51,7 @@ class Hyphenator(object):
                                             for h in re.split(r"[^-]", ex) ]
 
     def yield_patterns(self, lines):
-        """
+        r"""
         Yield hyphenation patterns from a sequence of strings
         (the content of a pattern file).
         Discard comments and metadata.
@@ -74,8 +74,8 @@ class Hyphenator(object):
         'a1 b2 c3'
 
         >>> extract_patterns(['% leading comment\n',
-        ...                   '\message{German Lyrics patterns}\n',
-        ...                   '\patterns{%\n',
+        ...                   '\\message{German Lyrics patterns}\n',
+        ...                   '\\patterns{%\n',
         ...                   '.a2b3a\n'
         ...                   '}\n'])
         '.a2b3a'
diff --git a/skripte/lib/py_wortliste/stilfilter.py b/skripte/lib/py_wortliste/stilfilter.py
index 2f70ea3..86e0a0c 100755
--- a/skripte/lib/py_wortliste/stilfilter.py
+++ b/skripte/lib/py_wortliste/stilfilter.py
@@ -419,7 +419,7 @@ def keine_schwankungsfaelle(wort):
 
 def keine_flattervokale(wort):
     """Entferne Trennmarker vor Einzevokalsilben (Thea-ter)."""
-    wort = re.sub('>([aeiouyäöü])[-]\.?', '>\\1', wort)
+    wort = re.sub(r'>([aeiouyäöü])[-]\.?', '>\\1', wort)
     wort = re.sub('(?<![<>=])[-.]+([aeiouyäöüëï])(?=[->][^.])', '\\1', wort)
     return wort
 
diff --git a/skripte/lib/py_wortliste/wortliste.py b/skripte/lib/py_wortliste/wortliste.py
index 9383833..873bdc0 100755
--- a/skripte/lib/py_wortliste/wortliste.py
+++ b/skripte/lib/py_wortliste/wortliste.py
@@ -1982,7 +1982,7 @@ def ableitung1901(wort, keep_key=False):
 #
 # ::
 
-    wort = re.sub('ß(=+)e([rn][-<]+)\.', r'ß\1e\2', wort)
+    wort = re.sub(r'ß(=+)e([rn][-<]+)\.', r'ß\1e\2', wort)
 
 # Dreikonsonantenregel
 # """"""""""""""""""""
@@ -2080,13 +2080,13 @@ def versalschreibung(wort, lang='de'):
     if '1901-x-versal' not in lang:
         wort = wort.replace('·ss', 's-s') # a·ßen -> as-sen
         # wort = re.sub('(?<=[aeiouyäöü])-\.?ss', 's-s', wort)
-        wort = re.sub('-\.?ss(?=[aeiouyäöü])', 's-s', wort)
+        wort = re.sub(r'-\.?ss(?=[aeiouyäöü])', 's-s', wort)
         wort = re.sub('(?<=^[aeiouyäöü])ss(?=[aeiouyäöü])', 's-s', wort)
         wort = re.sub('(?<=[=<][aeiouyäöü])ss(?=[aeiouyäöü])', 's-s', wort)
 
 # Unterdrückung irreführender Trennung::
 
-    wort = re.sub('ss(=+)(en|er)([<-])\.?', r'ss\1\2\3.', wort)
+    wort = re.sub(r'ss(=+)(en|er)([<-])\.?', r'ss\1\2\3.', wort)
 
 # Dreikonsonantenregel für Ersatz-ss in de-CH-1901::
 
@@ -2664,7 +2664,7 @@ def sortkey_duden(entry):
             if len(entry) == 1:  # ein Muster pro Zeile, siehe z.B. pre-1901
                 key = join_word(key)
     else:
-        match = re.search('^[-0-9;]*([^;\s]+)', entry) # erstes volles Feld
+        match = re.search(r'^[-0-9;]*([^;\s]+)', entry) # erstes volles Feld
         if match:
             key = match.group(1)
         else:
diff --git a/skripte/lib/py_wortliste/wortzerlegung.py b/skripte/lib/py_wortliste/wortzerlegung.py
index 2524343..857981b 100755
--- a/skripte/lib/py_wortliste/wortzerlegung.py
+++ b/skripte/lib/py_wortliste/wortzerlegung.py
@@ -731,7 +731,7 @@ if __name__ == '__main__':
                         default=default_wortliste)
     parser.add_argument('-k', '--komposita',
                         help='Liste Konstituenten zusammengesetzter Wörter '
-                        '(Teile vor und nach \'=\'). '
+                        r'(Teile vor und nach \'=\'). '
                         '"alle": auch vollständige Wörter der Eingabe, '
                         '"teile": keine vollständigen Wörter der Eingabe, '
                         '"selbständige": keine Konstituenten mit Bindungs-s, '
@@ -741,7 +741,7 @@ if __name__ == '__main__':
                         default='teile')
     parser.add_argument('-p', '--praefixe',
                         help='Präfixe (statt Komposita) bestimmen. '
-                        '"alle": alle Präfixe (Wortanfang bis \'<\', '
+                        r'"alle": alle Präfixe (Wortanfang bis \'<\', '
                         '"wörter": nur Homonyme zu Einträgen und Teilwörtern, '
                         '"neuwörter": keine Homonyme, '
                         '"": keine. '
@@ -750,7 +750,7 @@ if __name__ == '__main__':
                         default='')
     parser.add_argument('-s', '--suffixe',
                         help='Suffixe (statt Komposita) bestimmen. '
-                        '"alle": alle Suffixe von \'>\' bis Wortende, '
+                        r'"alle": alle Suffixe von \'>\' bis Wortende, '
                         '"wörter": nur Homonyme zu Einträgen und Teilwörtern, '
                         '"neuwörter": keine Homonyme, '
                         '"": keine. '
-- 
2.47.3


Viele Grüße

Günter



Mehr Informationen über die Mailingliste Trennmuster