如何将 Python 和 Notepad++ 中的连字符单词与带有异常模式的正则表达式结合起来?
Posted
技术标签:
【中文标题】如何将 Python 和 Notepad++ 中的连字符单词与带有异常模式的正则表达式结合起来?【英文标题】:How to unite hyphenated words in Python and Notepad++ with regex with patterns for exceptions? 【发布时间】:2022-01-22 23:42:14 【问题描述】:我想知道您是否可以帮助我改进 ([^\s\d])(-\s+) (replacement: $1) 正则表达式,以便它可以执行以下操作:
如果连字符后面的字母是小写字母,它应该只连接连字符。这意味着分割词的第二部分不能以大写字母、标点符号、括号、符号或数字开头。
它不应该在分割词的第二部分是“és”(和)或“tér”(方格)的情况下合并连字符。每个单词后面都有一个空格。
我想在 Notepad++ 和 Python 中使用修改后的正则表达式。在使用 Python 的应用程序中,我只能有一个单行正则表达式(用逗号分隔),例如 ([^\s\d])(-\s+),\1
示例 - 应用正则表达式后,以下文本应保持不变。
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
应该匹配的示例: 原始 OCR 编辑的报纸文本:
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...
应用正则表达式后:
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...
【问题讨论】:
那么,您尝试的模式是什么?是([^\s\d])(-\s+)
吗?它有什么问题?
为什么最后一个Szükséges-e
不变?
但是-
后面有一个小写字符,后面没有és
或tér
。这可以跨越多行吗?除了最后一个 ([^\s\d])-(?=[a-z])(?!\S*(?:és|tér) )
regex101.com/r/lZG6Xg/1 之外,这将进行替换
([^\W\d_])-\s+(?=(?!(?:és|tér)\b)[a-zàâäôéèëêïîçùûüÿæœ])
怎么样?见regex demo。
那么,my regex 不符合您的需要吗?
【参考方案1】:
你可以使用
([^\W\d_])-\s+(?=(?!(?:és|tér)\b)[a-záéőúüűöóí])
请参阅regex demo。 详情:
([^\W\d_])
- 任意一个字母
-
- 一个连字符
\s+
- 一个或多个空格
(?=(?!(?:és|tér)\b)[a-záéőúüűöóí])
- 一个积极的前瞻,需要(立即在当前位置的右侧):
(?!(?:és|tér)\b)[a-záéőúüűöóí]
- 来自a-záéőúüűöóí
集中的任何字符,它不是és
或tér
字符序列的起始字母,紧跟在单词边界位置之后。
【讨论】:
以上是关于如何将 Python 和 Notepad++ 中的连字符单词与带有异常模式的正则表达式结合起来?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Notepad++ 的 Python 脚本中将变量设置为正则表达式字符串?