Skip to main content
 首页 » 编程设计

python之复杂正则表达式的解释

2025年05月04日26me-sa

我有一些文本数据如下。

{"Timestamp": "Tue Apr 07 00:32:29 EDT 2015",Title: Indian Herald: India's Latest News, Business, Sport, Weather, Travel, Technology, Entertainment, Politics, Finance <br><br>Product: Gecko<br>CPUs: 8<br>Language: en-GB"} 

从下面的文本中,我使用以下正则表达式仅提取标题 ( Indian Herald: India's Latest News, Business, Sport, Weather, Travel, Technology, Entertainment, Politics, Finance):

appcodename = re.search(r'Title: ((?:(?!<br>).)+)', message).group(1) 

我想了解上面的正则表达式是如何工作的。

(?!<br>)是 <br> 的负前瞻

(?:(?!<br>).)+) - 这是什么意思?有人可以帮我分解一下吗? 另外,正则表达式中有多少个捕获组。

请您参考如下方法:

你不需要这么复杂的正则表达式来获得标题。使用

Title:\s*(.*?)(?=\s*<br/?>) 

参见 demo

我们匹配Title: , 然后是空格 \s* , 然后是 tp <br/> 上的任何字符与 (.*?)(?=\s*<br/?>) .

至于(?:(?!<br>).)+ ,这意味着 捕获 1 个或多个未跟随 <br> 的字符。有一个 SO post where this construction is explained in detail .

这是来自 regex101 的图片(转到 Regex Debugger 选项卡,然后单击右侧的 +)可视化该构造正在做什么(检查下一个字符是否为 <br>,如果不是,则使用并回溯,等):

关于正则表达式中有多少个捕获组的问题,Title: ((?:(?!<br>).)+)有 1 个捕获 (((?:(?!<br>).)+)) 和 1 个非捕获 ((?:(?!<br>).)) 组。