Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何';跳过';在python中使用正则表达式的特定单词?_Python_Regex_Python 3.x - Fatal编程技术网

如何';跳过';在python中使用正则表达式的特定单词?

如何';跳过';在python中使用正则表达式的特定单词?,python,regex,python-3.x,Python,Regex,Python 3.x,我正在写一个程序,它从维基百科上获取了一个德语习语的解释,并捕获了这个习语、它的含义和任何附加信息 例如,粗体文本应匹配: **这是一个很好的例子。如果您需要,请取消订阅。Zur词源des Wortes“backpsch”für unreafe Mädchen siehe dort.(Sprichwort um 1900:“Mit 14 Jahr'n and sieben Wochen is der backpsch ausgekrochen.”[6]) 基本上,这个短语在破折号-之后开始,在第

我正在写一个程序,它从维基百科上获取了一个德语习语的解释,并捕获了这个习语、它的含义和任何附加信息

例如,粗体文本应匹配:

**这是一个很好的例子。如果您需要,请取消订阅。Zur词源des Wortes“backpsch”für unreafe Mädchen siehe dort.(Sprichwort um 1900:“Mit 14 Jahr'n and sieben Wochen is der backpsch ausgekrochen.”[6])


基本上,这个短语在破折号-之后开始,在第一个句号之前结束,也就是说,它只有一个句子。但是,我想跳过缩写词,例如bzw.,z.B.,u.A.,等,因为它们并不表示句子的结尾

我不确定如何跳过这个词,但仍然要匹配它。另外,正如我所说的,我想跳过德语中常用的缩写,比如前面提到的斜体字


我已经尝试过匹配一个以-开头,以结尾的结构,而前面不应该有bzw。但是,我没有成功。这在德语中是一个问题,使用缩写,我在处理德语文本时也遇到了。你尝试过使用德语吗解析器,为了将文本剪切成短语/句子?尝试一种,它可能会有所帮助。例如,在Python中有NLTK和Stanford

在英语或法语中,人们可能会说短语的结尾用一个点和一个空格以及一个大写字母来标记。但是这不适用于德语,因为名词是大写的


另一方面,正如您所提到的“常用缩写”——如果它们如此频繁,为什么不在字典中收集它们并使用它们以便在文本中跳过它们呢?

使用一个非捕获组

(?<=– )(?:.+)?(?:bzw\.|Z\. b\.|u\. a\.)[^\.]+
例如,这将允许正则表达式也使用
字符而不是
,但您需要将结果作为组1检索


如何确定缩写词是什么?“因为缩写词不表示句子的结尾”-他们从来没有标记过一个句子的结尾吗?@iakobski不,他们没有,这和英语一样,在英语中,i.e.或e.g.永远不会是一个句子的最后一个词。@UnrableLightness这是一个微不足道的答案,但我只是做了,因为我懂德语。我没有为此使用任何编程逻辑。你不能解析英语、德语、法语或任何语言th regex。这是完全不可能的。谢谢你的想法!我尝试使用NLTK包对文本进行标记,从而将其拆分成句子。但是,标记器错误地将bzw之后的。识别为句子的结尾。也可以尝试斯坦福语法分析器。谢谢!让情况进一步复杂化,假设句子是“albern oder Unref sein”(用oder替换bzw)。我试图修改正则表达式,以便它捕获句子,但没有成功,这有可能吗?@Daka当然,只需使用|->添加oder…(?:oder | bzw.| Z\.b\.| u\.a\)。。。
(?<=– )                    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
(?:– |: )((?:.+)?(?:bzw\.|Z\. b\.|u\. a\.)[^\.]+)