最后出现的正面观察

时间:2018-01-28 17:15:59

标签: python regex

如果我的文字格式如下:

string = "B. 1922, Naperville in the Chicago area; white; education: secondary; b/p."

我想捕获“b / p”部分。我想过使用积极的外观:

r"(?<=;)(.*)(?=\.)"

但是,当然,这回顾了“;”就在“区域”之后。

Example

你们将如何捕获字符串末尾的所有内容,直到最后一次出现“;”?所需的输出是“b / p”。

5 个答案:

答案 0 :(得分:4)

如果你想要最后一个&#34 ;;&#34;之后的字符串,你可以有一个简单的非正则表达式解决方案:

string.split(';')[-1]

我不确定你的模式究竟是什么,如果它没有帮助你,我会编辑我的答案。

答案 1 :(得分:2)

在你的情况下,我认为你不需要向前看或向后看。让贪婪的量词做他们的工作:

.*;(.*)\.

此外,与使用前瞻/后方的解决方案相比,它具有非常高的性能。

答案 2 :(得分:1)

您可以使用否定字符类

(?<=;)\s*([^;.]*)(?=\.)

Updated RegEx Demo

  • [^;.]*匹配零个或多个不是;.的字符

答案 3 :(得分:1)

您可以为;使用正面的lookbehind,并收集最后四个字符:

import re
string = "B. 1922, Naperville in the Chicago area; white; education: secondary; b/p."
print(re.findall('(?<=;\s)[\w\W]{4}$', string)[0])

输出:

b/p.

答案 4 :(得分:1)

如我所见,您想捕获最后 ;之间的字符串 以及它之后的第一个.(不包括)。

试试这样的正则表达式:

;(?!.*?;)(.*?)\.

并阅读捕获组No 1的内容。

详细说明:

  • ; - 匹配分号。
  • (?!.*?;) - 否定前瞻 - 无法找到任何分号。
  • (.*?) - 这是您要捕获的内容。在?之后注意* - 不情愿版本。
  • \. - &#34;你的&#34;之后的点。文本。