如果我的文字格式如下:
string = "B. 1922, Naperville in the Chicago area; white; education: secondary; b/p."
我想捕获“b / p”部分。我想过使用积极的外观:
r"(?<=;)(.*)(?=\.)"
但是,当然,这回顾了“;”就在“区域”之后。
你们将如何捕获字符串末尾的所有内容,直到最后一次出现“;”?所需的输出是“b / p”。
答案 0 :(得分:4)
如果你想要最后一个&#34 ;;&#34;之后的字符串,你可以有一个简单的非正则表达式解决方案:
string.split(';')[-1]
我不确定你的模式究竟是什么,如果它没有帮助你,我会编辑我的答案。
答案 1 :(得分:2)
在你的情况下,我认为你不需要向前看或向后看。让贪婪的量词做他们的工作:
.*;(.*)\.
此外,与使用前瞻/后方的解决方案相比,它具有非常高的性能。
答案 2 :(得分:1)
答案 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;之后的点。文本。