如何在python中使用正则表达式“跳过”特定单词?

Dak*_*aka 2 python regex python-3.x

我正在编写一个程序,该程序以Wikipedia中的德语成语为例,并说明了该成语,其含义和所有其他信息。

例如,粗体文本应该被匹配:

** Sich wie ein Backfisch benehmen – albernbzw。Unreif sein。Zur Etymologie des WortesMädchensiehe dort的“ Backfisch”。(Sprichwort um 1900:“ Mit 14 Jahr'n und sieben Wochen ist der der Backfisch ausgekrochen。” [6])。

基本上,该短语在破折号之后开始-在第一个句号之前结束,即仅一个句子。但是,我想跳过诸如bzw之类的缩写。,z。B.ü。A.等,因为它们不标记句子的结尾。

我不确定如何略过该词,但仍然匹配。而且,正如我所说,我想跳过德语中常用的缩写,例如上述斜体字。

我已经尝试过匹配以-开头和以结尾的结构,而不应在bzw之前。但是,我没有做到这一点。

vs9*_*s97 5

使用非捕获组。看一看:

(?<=– )(?:.+)?(?:bzw\.|Z\. b\.|u\. a\.)[^\.]+
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

正则表达式演示 -右上角,您可以看到各个正则表达式组件的描述。

(?<=– )                    start after – character + whitespace, but not match
(?:.+)?                    add any text before abbreviation into non-capturing group.
(?:bzw\.|Z\. b\.|u\. a\.)  add abbreviations into non-capturing group. Escape the dots via \. 
[^\.]+                     match anything until fullstop
Run Code Online (Sandbox Code Playgroud)

本质上,这个想法是从-字符+空格开始的,但不匹配它。然后捕获以下所有文本,缩写并捕获到第一个点.,但不捕获缩写组(请注意?:)。由于缩写点是非捕获组的一部分,因此我们“跳过”它并继续到句末的点为止。您可以通过|符号添加更多缩写来扩展缩写列表。

奖金:

如果您预计不会总是从序列开始,则可以执行以下操作:

(?:– |: )((?:.+)?(?:bzw\.|Z\. b\.|u\. a\.)[^\.]+)
Run Code Online (Sandbox Code Playgroud)

例如,这将使正则表达式也可以处理:字符而不是,但是您需要将结果作为组1进行检索。

正则表达式演示