我有一些文本数据如下。
{"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>).)) 组。
