使用Regex拆分标题与URL配对及Python正则全匹配问题求助
解决书籍标题与URL连续字符串的拆分问题
问题根源
你之前用的正则\w*\s\w*\s\w*://\w*.\w*/\w*\s有两个核心缺陷:
\w*只能匹配字母、数字和下划线,完全覆盖不了书名里的连字符、标点等特殊字符,而且固定了单词数量,没法适配长短不一的书名。- 只返回第一个匹配结果是因为你用了
re.match()或re.search(),这两个方法只会找第一个符合条件的内容,要拿全量结果得用专门的方法。
正确的正则写法
用这个正则可以匹配任意包含特殊字符的书名,以及对应的http/https开头的URL:
pattern = r'(.+?)(https?://\S+)'
(.+?):非贪婪模式匹配书名,会把URL之前的所有内容(包括空格、连字符、标点)都捕获为第一组,直到遇到http或https开头的URL。(https?://\S+):匹配http/https开头的完整URL,\S+会匹配所有非空白字符,直到遇到空格(也就是下一组内容的开始)。
Python代码实现
直接用re.findall()就能获取所有匹配的分组对,然后循环输出每行一组:
import re # 替换成你的连续字符串输入 input_text = "Python编程入门-从新手到高手 https://example.com/book1 数据结构与算法分析 https://example.com/book2 机器学习实战:基于Scikit-Learn和TensorFlow https://example.com/book3" pattern = r'(.+?)(https?://\S+)' matches = re.findall(pattern, input_text) # 遍历结果,每行输出一组标题和URL for title, url in matches: # 去除标题末尾可能多余的空格 print(f"{title.strip()} {url}")
如果需要导入Word,直接复制打印的结果粘贴即可,也可以把结果整理成字符串后写入.docx文件。
补充说明
如果你的字符串末尾没有空格,正则依然能正常匹配,因为\S+会匹配到字符串结尾。要是遇到URL里包含?、#这类特殊字符,这个正则也能兼容,因为\S包含除空白外的所有字符。
内容的提问来源于stack exchange,提问作者Matan
相关产品推荐
相关产品推荐

