learner2021
learner2021

Reputation: 51

How to unite hyphenated words in Python and Notepad++ with regex with patterns for exceptions?

I wonder if you could help me refine the ([^\s\d])(-\s+) (replacement: $1) regex so that it could do the following:

  1. It should only join hyphenated words if the letter after the hyphen is a lowercase letter. This means that the second part of the divided word canNOT start with an upper case letter, a punctuation mark, a bracket, a symbol or a number.

  2. It should NOT unite hyphenated words where the second part of the divided word is either "és " (and) or "tér " (square). There is a space after each word.

I would like to use the modified regex in both Notepad++ and Python. In the application using Python I can have only a one-line regex (separated by comma) such as ([^\s\d])(-\s+),\1

Example - the following text should remain unchanged after applying the regex.

 Nyugat- Németország kormánya
 Text text text Kelet-
 Európa
 Text text text Valéria-
 tér sarok.
 érettségi után a Színház- és 
 Filmművészeti Főiskolára járt
 text text text elválaszt-
 (this is due to OCR errors)
 2001-ben
 8-10
 Szükséges-e

Examples for what should be matched: The original OCR-ed newspaper text:

Minden demokrata erőnek közö-
sen kell fellépnie és „falat húznia" 
a Jobbik elé - mondta Ke-
rék-Bánczy Szabolcs, az MDF el-
nökségi tagja keddi sajtótájékoz-
tatóján. Kerék-Bárczy közölte: mi-
közben politikai konszenzus ala-
kult ki a magyar parlamenti pár-
tok között a szlovák nyelvtör-
vénnyel kapcsolatban, pozícióikat 
súlyosan rombolja a Jobbik tevé-
kenysége. Ezt azzal magyarázta, 
hogy a Jobbik állandó hivatkozási 
alapot biztosít a szlovákiai kor-
mánypártoknak. hogy folyamato-
san ujjal mutogathassanak Ma-
gyarországra, mert itt is van egy 
EP-képviselettel rendelkező cso-
port, amely mások kirekesztésére 
és az irredentizmusra építi politi-
káját. Az MDF ezért kezdeménye-
zi, hogy az EP-képviselők nyilvá-
nítsák ki...

After applying the regex:

Minden demokrata erőnek közösen kell fellépnie és „falat húznia" 
a Jobbik elé - mondta Kerék-Bánczy Szabolcs, az MDF elnökségi tagja 
keddi sajtótájékoztatóján. Kerék-Bárczy közölte: miközben politikai 
konszenzus alakult ki a magyar parlamenti pártok között a szlovák 
nyelvtörvénnyel kapcsolatban, pozícióikat súlyosan rombolja a 
Jobbik tevékenysége. Ezt azzal magyarázta, 
hogy a Jobbik állandó hivatkozási 
alapot biztosít a szlovákiai kormánypártoknak. hogy folyamatosan 
ujjal mutogathassanak Magyarországra, mert itt is van egy
EP-képviselettel rendelkező csoport, amely mások kirekesztésére 
és az irredentizmusra építi politikáját. Az MDF ezért kezdeményezi, 
hogy az EP-képviselők nyilvánítsák ki...

Upvotes: 1

Views: 80

Answers (1)

Wiktor Stribiżew
Wiktor Stribiżew

Reputation: 626774

You can use

([^\W\d_])-\s+(?=(?!(?:és|tér)\b)[a-záéőúüűöóí])

See the regex demo. Details:

  • ([^\W\d_]) - any one letter
  • - - a hyphen
  • \s+ - one or more whitespaces
  • (?=(?!(?:és|tér)\b)[a-záéőúüűöóí]) - a positive lookahead that requires (immediately to the right of the current location):
    • (?!(?:és|tér)\b)[a-záéőúüűöóí] - any char from the a-záéőúüűöóí set that is not a starting letter of the és or tér char sequences that are immediately followed with a word boundary position.

Upvotes: 1

Related Questions