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之前。但是,我没有做到这一点。
使用非捕获组。看一看:
(?<=– )(?:.+)?(?: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进行检索。
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |